我在嘗試一個相當複雜的git歷史修剪,並未能找到與git filter-branch
一起使用的命令。基本上我想刪除除了幾個匹配的文件和目錄之外的所有內容。git過濾分支內倒置的外殼通配
我想運行的命令實際上是
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
處理嵌入式括號很好,但是這也超出我的shell/zsh的理解。
而且在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"