0

我正在尝试缩小大约 2GB 的 Git 存储库。

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

运行git gc,然后是git verify-packandgit rev-list命令后,我发现了一个.tar大约 118MB 的文件。我根本不需要它在我的回购中。它需要永远摧毁。

但是当我试图找出哪些提交使用了该文件时,我什么也没得到:

git log --oneline -- news/news.tar

这是否意味着该文件不在存储库历史记录中?如果是这种情况,我可以离开它还是当我这样做时它仍然会被推上去git push

如果是这种情况,我该如何摆脱它。

4

1 回答 1

4

使用 BFG,而不是 git-filter-branch ...

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”参数意味着查看所有refs,而不仅仅是分支 - 标签,和其他奇异类型的 ref) ...但是您的git log --oneline -- news/news.tar命令没有--all,它只是列出您当前的分支。您的 blob 由不同的引用持有 - 可能是不同的分支或标签。

说真的,只需使用 BFG。

全面披露:我是 BFG Repo-Cleaner 的作者。

于 2013-08-28T14:47:43.800 回答