3

我有一些svg文件希望被git. 但是,大多数软件都可以透明地处理svgz(基本上是svg.gz)。因此,我正在考虑切换到svgz以节省磁盘空间。

svgz将它们作为而不是svg从一个角度来看有什么优点和缺点git

我幼稚的想法是git 差异算法针对文本文件进行了优化,并且在压缩的对应物上效果不佳。由于差异也被压缩,我假设整体方法对于文本文件非常有效,其中差异占用非常少的磁盘空间。相反,对于压缩数据,它倾向于在内部保存更大的文件,最终我希望存储库最终可能会占用更多空间来存储压缩文件。

4

1 回答 1

5

Git在包文件中使用Xdelta的变体。这与文本差异(Git 使用XDiff的变体)是分开的。Git 的所有存储对象也都使用 Git 的 zlib deflate 进行压缩,这与 gzip 基本相似,因此在这个特定级别上,它几乎是一种清洗1

.gitattributes如果您的图像很大,或者您通过with将它们标记为“不要尝试进行增量压缩” -delta,您可能需要预压缩它们,即将它们存储为svgz文件,只是为了提高速度。2 如果它们更小,并且某个svg文件可以很好地对其他svg文件进行增量压缩,您通常希望避免预压缩它们,因为这将使Git无法对它们进行增量压缩。

另请参阅重新打包存储库对大型二进制文件有用吗?Git 的包文件是增量而不是快照吗?我对 git do when we do 的回答中还有更多内容:git gc-git prune 。最重要的是,您必须进行一些测试,以了解最适合您的特定情况的方法。请注意,获取和推送使用“瘦包”(其中对象被压缩到已知存在于其他 Git 中但未包含在包文件中的基本对象)来加速网络传输,这可能比节省磁盘空间重要,所以也考虑一下。


1个六个一个,半打另一个

2即使 Git 和其他工具压缩它们所花费的时间是相同的,标记它们-delta将使 Git 不会考虑将它们打包,这样可以节省git repack时间。

于 2018-09-01T19:26:31.340 回答