我从git存储库中删除了一堆意外提交的节点模块。为此,我需要删除名为' node_modules'的所有目录。从每次提交。我不知道目录'文件路径,所以我使用find
来查找和删除它们。此命令执行我想要的HEAD
:
find . -name node_modules -type d -prune -exec rm -rf {} \;
然而,当我尝试将它与git filter-branch一起使用时,它不仅删除了“node_modules”'目录,但也包含完整的文件子树。也就是说,如果我运行这个:
git filter-branch --tree-filter 'find . -name node_modules -type d -prune -exec rm -rf {} \;'
来自存储库的基本目录,如下所示:
./node_modules/
./x/node_modules/
./y/z/node_modules/
./a/
结果将是:
./a/
即使我希望它是这样的:
./x/
./y/z/
./a/
这是git filter-branch的已知限制,还是我做错了什么?
注意:我知道BFG repo cleaner通常比git filter-branch
更好地删除所有具有相同名称的目录,但我的平台上没有Java。
注意#2:我也知道使用git index-filter可能更好。我没有太多关注这个因为我正在构建一个更大的脚本来传递给git filter-branch,而且脚本中还有其他命令只能用于git tree-filter。