所以我们有一个用户添加,然后在她的工作区中删除一个大的文件目录,它是两个不同的提交。然后,她将更改推送到中央仓库,最终用户看起来像是一个noop。问题是我们的核心仓库因此而增加了50倍。我尝试了几个带过滤器分支的东西,它只是不起作用。
因此添加的文件夹位于根级别。它的名字是.core
我根据链接尝试了以下过滤器分支:
http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/
Remove a directory permanently from git
我尝试过的最终命令如下所示:
git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch .core" --prune-empty --tag-name-filter cat -- --all
rm -Rf .git/refs/original
rm -Rf .git/refs/logs
git reflog expire --expire=now --all && git gc --prune=now --aggressive
结果输出表示Ref不变。我已经尝试将.core的引用更改为各种变体,例如./.core,* .core / *,.....并且没有删除任何内容。
感谢。
答案 0 :(得分:3)
使用the BFG,这是git-filter-branch
的一种更简单,更快捷的替代方案,专门用于从Git历史记录中删除不需要的文件。
仔细关注BFG' usage instructions - 核心部分就是这样:
$ java -jar bfg.jar --delete-folders .core my-repo.git
任何名为.core
的文件夹(不在最新提交中)都将从您的Git存储库历史记录中删除。然后,您可以使用git gc
清除死数据:
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
BFG通常比运行git-filter-branch
至少10-720x快,并且通常更容易使用。
完全披露:我是BFG Repo-Cleaner的作者。