我有一个git存储库,其中有许多PDF文件。git存储库的大小增加得太多了,以至于当互联网连接受到限制时,将存储库克隆到新主机是非常复杂的...
我用了git gc && git gc --aggressive
它花了我很多RAM,并且没有做任何有用的事情。存储库的大小仍然基本相同。
我听说过,git annex
但是我不知道这是不是正确的方法,因为我不想每次都需要其中一张PDF时就拉纸。我当然可以做到,并将所有文件保留在笔记本电脑上,但我想一次克隆所有内容,而不是两个不同的存储库)
有没有一种减小大小的好方法,并且仍然可以使用PDF(除了减小PDF的大小-我的存储库中有一些大小超过100MB)
Git和Mercurial都不能很好地处理大型二进制文件。他们都假设被跟踪的文件相对较小且易于扩散,但PDF文件都不是。如果您已经运行git gc
,则您的存储库不会比原来的小很多。
如果您不希望使用第三方解决方案,则可以使用子模块通过Git缓解这种情况。如果可以的话,您可以将存储库中的不同文件拆分为子模块,然后分别克隆它们。这样,您可以克隆主项目以获取所有子模块引用,然后根据需要克隆每个子模块。
但是,您怀疑git annex可能是最好的解决方案。这是一个工件存储库,有点像Mercurial的bfiles。这些工件存储库旨在用于大型,二进制,不可扩散的文件。他们管理人工制品的检索;Git和Mercurial仅负责维护参考。这样,当您使用Git进行克隆时,只需克隆参考,工件检索是根据需要执行的单独步骤。
如果您选择这些路线之一,则可能需要考虑重写历史记录,以删除所有先前提交的对象,并将它们移至子模块或git附件中。如果您不这样做,那么您的存储库将始终至少与现在一样大。
附带说明,之所以git gc
没有减少存储库的大小,是因为Git的垃圾回收仅从存储库中删除了未引用的对象,并将松散的对象压缩为打包文件。由于您的PDF都被引用,并且在pack文件中压缩得不好,因此存储库不会变得越来越小。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句