清理git存储库中的二进制blob

时间:2011-07-17 15:25:33

标签: git

我们的git存储库中有一个二进制文件。通常它的大小约为2MB。

我们的一位开发人员意外地将此文件与其所有依赖项捆绑在一起,这使文件大约增加到40MB。

当然我们提交了一个固定版本,但主存储库仍然有我们不需要的40MB二进制数据。我可以保证我们永远不会需要该文件的特定提交的历史记录(或任何其他提交的事件 - 它是一个已编译的二进制文件,无论如何我们都有源版本。)

如何删除该blob数据以恢复repo大小?一个简单的git gc是不够的,我认为我需要一些我不熟悉的低级别黑客攻击。

2 个答案:

答案 0 :(得分:5)

如果您可以从源代码创建文件,则很可能根本不属于存储库。

如果要从存储库中删除该版本的文件,则必须重新设置存储库,最好使用git rebase -i。问题在于它重写了历史记录,你真的不应该对已经公开的提交(即在多个用户之间共享)这样做。如果您真的想要,请参阅Recovering from upstream rebase了解如何使其发挥作用。

执行该rebase后,该文件将在存储库中停留一段时间,但最终会自动删除。如果您使用git clonegit pull,则根本不会传输。

答案 1 :(得分:0)

如果您结帐,则该文件将到达您的本地回购副本。然后使用git rm来解决它。或者,为了使它看起来像是从未添加过来,请查看:Completely remove file from all Git repository commit history