【问题标题】:How does git perform on compressed files?git 如何处理压缩文件?
【发布时间】:2019-02-07 10:03:03
【问题描述】:

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

git 的角度来看,将它们设置为svgz 而不是svg 的优缺点是什么?

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

【问题讨论】:

    标签: git compressed-files


    【解决方案1】:

    Git 在包文件中使用Xdelta 的变体。这与文本差异(Git 使用XDiff 的变体)是分开的。 Git 存储的所有对象也都使用 Git 的 zlib deflate 进行压缩,即fundamentally similar to gzip,所以在这个特定级别,它几乎是a wash1

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

    另见Is repacking a repository useful for large binaries?Are Git's pack files deltas rather than snapshots? 我对What does git do when we do : git gc - git prune 的回答中还有更多内容。最重要的是,您将不得不进行一些测试,以查看最适合您的特定情况的方法。请注意,获取和推送使用“瘦包”(其中对象被压缩到已知存在于其他 Git 中的基础对象,但未包含在包文件中)来加速网络传输,这可能更多 em> 比节省磁盘空间重要,所以也要考虑这一点。


    1six of one, half a dozen of the other

    2即使 Git 和其他工具压缩它们所需的时间相同,将它们标记为 -delta 将使 Git 不会考虑将它们打包,这将节省 git repack 时间.

    【讨论】:

      猜你喜欢
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多