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