我想将图像文件存储在 SVN 存储库中。我已经读到 SVN 将尝试将基于增量的更改存储到存储库中,而不仅仅是一个简单的副本。但是,另一种方法是将图像更改为 base64 并将其存储为文本版本。考虑到创建 base64 图像的成本,这会更实用还是更糟?
2 回答
Git 不使用 deltas 来存储差异,并且对于图像文件,这无论如何都是不可能的。这意味着,如果跟踪的图像发生变化,它会在存储库的大小中增加其自身大小的 100%,并且由于图像已经被压缩,它们无法使用 git 的打包进行压缩。
问题是,图像有多大以及它们多久更改一次,您可以通过这些来估计存储库的增长速度。然后,您可以参考针对您的用例的存储库大小建议。
Git(也包括 Subversion)使用 deltas 将文件存储在存储库中。在 Git 和 Subversion 中,它们都是可以很好地处理二进制文件的二进制增量。他们还找到匹配的字节运行,并且不依赖任何分隔符,例如存在的换行符。
虽然 subversion 对文件的先前版本进行 delta 化,但 Git 最初存储全文,并在gc
操作期间选择一些可能的候选者并选择最相似的文件来进行 delta 处理。这意味着当更改部分或全部还原时,它可以(有时)利用单独的类似文件或旧版本。Git 将 deflate 压缩应用于全文和增量(Subversion 没有)。
没有其他通用的多版本文件压缩存储方法。当您需要保留旧版本的文件时,Git 是最佳选择或几乎是最佳选择。与专用备份系统相比,唯一的缺点是 Git 无法删除旧版本。
大多数图像都是压缩的,这通常意味着当存在差异时,文件的所有其余部分也会有所不同,因此它们不会从增量压缩中获得太多收益,并且被压缩不会从应用的额外压缩中获得太多收益吉特。然而,Git 有一种机制来提供“干净”和“涂抹”过滤器. “干净”过滤器在将文件存储到存储库之前应用,“涂抹”过滤器在检出时应用。如果是 PNG 文件,您可以使用它们来重写文件而不进行压缩。如果它们实际上包含在不同版本中相同的大部分,则增量压缩将利用它们,并且压缩将在之后由 git 应用(使用相同的算法),因此您不会丢失任何东西。在实践中,我怀疑只有当你有很多图像并且它们的大部分实际上是相同的时才值得麻烦。也适用于其他压缩格式,如 OpenOffice 文档。