git 中的 PDF,减小大小

reo*_*eox 6 pdf git branch

我有一个 git 存储库,里面有很多 PDF 文件。git 存储库的大小越来越大,以至于当 Internet 连接有限时,将存储库克隆到新主机非常复杂......

我使用git gc && git gc --aggressive它花费了我很多内存并且没有做任何有用的事情。存储库的大小仍然大致相同。

我听说过,git annex但我不知道这是否是正确的方法,因为我不想每次需要其中一个 PDF 时都拉。当然我可以这样做并将所有文件留在我的笔记本电脑上,但我想一次克隆所有内容而不是两个不同的存储库)

是否有一种减小大小并仍然可以使用 PDF 的好方法(除了减小 PDF 的大小 - 我的存储库中有一些大小超过 100MB)

Ste*_*ngs 10

Git 和 Mercurial 都不能很好地处理大型二进制文件。它们都假设被跟踪的文件相对较小且易于区分,但 PDF 文件两者都不是。如果您已经运行了git gc,那么您的存储库不会比现在小得多。

如果您不想要第三方解决方案,您可以通过使用子模块使用 Git 来缓解这种情况。如果有意义,您可以将存储库中的不同文件拆分为子模块,并分别克隆它们。这样,您可以克隆主项目以获取所有子模块引用,然后根据需要克隆每个子模块。

但是,正如您所怀疑的,git Annex可能是最好的解决方案。它是一个工件存储库,有点像Mercurial 的bfiles。这些工件存储库旨在与大型、二进制、不可区分的文件一起使用。他们管理工件的检索;Git 和 Mercurial 只负责维护引用。这样,当您使用 Git 进行克隆时,您只需克隆引用,并且工件检索是根据需要执行的单独步骤。

如果您选择这些路线之一,您可能需要考虑重写历史记录以删除所有以前提交的对象并将它们移动到子模块或 git 附件中。如果不这样做,那么您的存储库将始终至少与现在一样大。


附带说明一下,之所以git gc没有减少存储库大小,是因为 Git 的垃圾收集仅从存储库中删除未引用的对象并将松散的对象压缩到包文件中。由于您的 PDF 都被引用,并且它们在包文件中没有很好地压缩,因此存储库不会变得更小。