Git:只存储最新的副本,而不是增量

时间:2015-01-31 15:40:51

标签: git

我的代码有一个git存储库,但也希望在子目录中包含一些Word文件和PDF,并且可能想要添加一些二进制文件。我不想存储增量,只是这些文件的最新版本。有没有办法在git中做到这一点?

1 个答案:

答案 0 :(得分:4)

有几种方法可以做你想要的。在这里,他们从大多数到最不愉快。

如果它们很小,或者不经常更换,请不要担心。如果你不压缩它们(记住PDF经常被压缩),Git仍然可以获取二进制文件的增量(我想,你可能不得不欺骗它认为它是一个文本文件)。如果结果太大,您可以稍后使用BFG和一次性中断将其从历史记录中删除。

如果它们很大或经常更改,可能最好的选择是不将文件存储在Git中。而是将它们作为构建过程的一部分下载。你不想要他们的历史,你只想要他们的最新版本。

另一种方法是按照git-annex中的建议使用this answer之类的工具。

  

git-annex允许使用git管理文件,而无需将文件内容检入git。虽然这看似矛盾,但是当处理大于git的文件当前可以轻松处理时,无论是由于内存,时间还是磁盘空间的限制,它都很有用。

另一种方法是将它们存储在另一个 Git存储库中,并使用submodulessubtrees将其链接到您的存储库。可以使用--depth标志告诉子模块使子存储库的浅表副本。这使您可以保留这些大文件的历史记录,使您的开发存储库的历史记录保持较小。不幸的是,这两种技术都有其注意事项。

最后,您可以使用git-filter-branch或BFG定期从历史记录中剔除文件。这不仅仅是一个手动过程,而且由于Git无法更改历史记录创建新历史,它将重写所有以下提交并在推拉时造成一般混乱。

Much of this is covered in this question