git筛选器分支-删除多个子模块之一

git筛选器分支-删除多个子模块之一,git,git-filter-branch,git-bare,Git,Git Filter Branch,Git Bare,我一直在使用git filter branch来清除遗留文件,但是对于一个简单的git repo,我不知道如何在删除git子模块的地方重写git历史 我有一个顶级回购协议“Donald”,在“Donald”之下,我有四个子模块“Huey”、“Dewey”、“Louie”和“Phooey”[1]。 “Phooey”本不应该被添加进去,不幸的是,时间在它出现的地方流逝了 我找到的最好的参考资料是,但它有点太多了 [1] :-)首先,备份。仅对一个模块进行脱硝并移除: git filter-branc

我一直在使用git filter branch来清除遗留文件,但是对于一个简单的git repo,我不知道如何在删除git子模块的地方重写git历史

我有一个顶级回购协议“Donald”,在“Donald”之下,我有四个子模块“Huey”、“Dewey”、“Louie”和“Phooey”[1]。 “Phooey”本不应该被添加进去,不幸的是,时间在它出现的地方流逝了

我找到的最好的参考资料是,但它有点太多了


[1] :-)

首先,备份。仅对一个模块进行脱硝并移除:

git filter-branch -f --prune-empty --tree-filter '
    git submodule deinit -f -- path/to/module &&
    git rm -rf path/to/module || :
' HEAD &&
rm -rf .git/modules/path/to/module 

您是否在其他人正在使用的分支上执行筛选器分支?在这种情况下,这可能有点有害,因为由于您正在重写历史记录,您将重写您的队友已经签出并正在处理的提交。一般来说,在大多数情况下,使用过滤器分支仅删除几个文件似乎有些过分。如果我正确地理解了您的情况,那么对您的同事来说,最不干扰、最不复杂、最不必要的额外工作就是删除文件夹并提交删除。它在历史上也更加透明,人们会看到正在发生的事情。@dvaergiller我完全理解,但我有很强的商业理由朝这个方向发展。它对正常回购很有效,但对裸回购不起作用裸回购不能有子模块,没有要删除的内容。为什么git
.gitmodules
文件在树过滤器第一次迭代后的任何后续提交中都未被触及?为什么应该如此?所有命令都不会触及
.gitmodules