收缩Git Repo-数据包中的对象,而不是提交中的对象



我正在尝试缩减大约2GB的Git回购。

我正在遵循ProGit书第9章(9.7)的"删除对象"部分:http://git-scm.com/book/en/Git-Internals-Maintenance-and-Data-Recovery

在运行了git gcgit verify-packgit 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回购清洁剂的作者

最新更新