我的git仓库顶部有一个incubator
目录,我想将其从历史记录中完全删除。我试过了:
git filter-branch --force --tree-filter "rm -rf incubator/" --prune-empty HEAD
和
git filter-branch --force --index-filter "git rm --cached -r -f --ignore-unmatch incubator" --prune-empty
但他们都没有工作。
我在这里做错了吗?有没有办法可以看到发生了什么或为什么没有删除这个目录?
答案 0 :(得分:1)
重写Git历史是一个棘手的过程,而git-filter-branch
并不容易(见下文),所以请使用the BFG,git-filter-branch
,$ java -jar bfg.jar --delete-folders incubator my-repo.git
的更简单,更快的替代方案,专门设计用于从Git历史记录中删除不需要的文件。
仔细遵循BFG的usage instructions - 核心部分就是这样:
incubator
任何名为git gc
的文件夹(不在最新提交中)都将从您的Git存储库历史记录中删除。然后,您可以使用$ git gc --prune=now --aggressive
清除死数据:
git-filter-branch
BFG通常比运行git filter-branch
至少10-720x快,并且通常更容易使用。
因为(如上所述)重写Git历史是一项复杂的业务,有很多的方法可能会出错,所以你可能需要在你说的地方添加更多细节但是他们中没有一个在你的问题中“”。你使用的incubator
咒语看起来像是某些东西 - 它会从你的主分支中删除--all
文件夹 - 所以至少这样做了吗?也许你希望它从其他分支中删除,在这种情况下你需要添加--tag-name-filter cat
标志,或者你也希望它从标记的提交中删除,这需要{{1}}。更多详情:https://stackoverflow.com/a/21023615/438886
如果可以的话,还有很多事情可能会出错,你最好还是使用BFG。
完全披露:我是BFG Repo-Cleaner的作者。