我正在尝试缩减大约2GB的Git回购。
我正在遵循ProGit书第9章(9.7)的"删除对象"部分:http://git-scm.com/book/en/Git-Internals-Maintenance-and-Data-Recovery
在运行了git gc
、git verify-pack
和git rev-list
命令之后,我发现了一个大约118MB的.tar
文件。我根本不需要它出现在我的回购中。它需要永远毁灭。
但当我试图找出哪些提交使用了该文件时,我一无所获:
git log --oneline -- news/news.tar
这是否意味着该文件不在存储库历史记录中?如果是这样的话,我可以离开它吗?还是当我做git push
时,它仍然会被推起来作为一个物体?
如果是这样的话,我该如何摆脱它。
使用BFG,而不是git过滤器分支
BFG提供了一种清除大文件的简单方法,比使用git filter-branch
容易得多,请参阅http://rtyley.github.io/bfg-repo-cleaner/:
$ bfg --strip-blobs-bigger-than 100M my-repo.git
还在这里
如果你想弄清楚在遵循ProGit书第9.7节"删除对象"中的步骤时出了什么问题,那么不幸的是,有几个地方可能会出错。
news.tar
文件目前由您的一个分支、标记或其他类型的ref保存-我们知道这一点,因为该文件在您运行git rev-list --objects --all
时显示('-all'参数表示查看所有ref,而不仅仅是分支-标记和其他奇异类型的ref)。。。但是您的git log --oneline -- news/news.tar
命令没有--all
,它只是列出您当前的分支。您的blob由不同的引用持有,可能是不同的分支或标记。
说真的,只要使用BFG。
全面披露:我是BFG回购清洁剂的作者