Я пытаюсь довольно сложную обрезку истории git и не могу найти команду, которая работает с git filter-branch
. По сути, я хочу удалить все, кроме нескольких подходящих файлов и каталогов.Перевернутая оболочка, зависающая внутри git filter-branch
Команда, которую я хотел бы работать эффективно
git filter-branch -f --prune-empty --tree-filter 'rm -rf ^(FileA.java|dirB)' HEAD
Но git-filter-branch
сценарий barfs на круглые скобки.
/usr/local/Cellar/git/HEAD/libexec/git-core/git-filter-branch: eval: line 360: syntax error near unexpected token `('
/usr/local/Cellar/git/HEAD/libexec/git-core/git-filter-branch: eval: line 360: `rm -rf ^(FileA.java|dirB)'
tree filter failed: rm -rf ^(FileA.java|dirB)
Я бы ожидал eval
обрабатывать вложенные скобки хорошо, но это также вне моей оболочки/ЗШ понимание.
И код обижая в git-filter-branch
if [ "$filter_tree" ]; then
git checkout-index -f -u -a ||
die "Could not checkout the index"
# files that $commit removed are now still in the working tree;
# remove them, else they would be added again
git clean -d -q -f -x
eval "$filter_tree" < /dev/null ||
die "tree filter failed: $filter_tree"