在版本控制(如Subversion)中存储映像的最佳实践



我想在SVN存储库中存储映像文件。我了解到,SVN将尝试将基于增量的更改存储到存储库中,而不仅仅是简单的副本。但是,另一种选择是将图像更改为base64并将其存储为文本版本。考虑到创建base64映像的成本,这是更实用还是使事情变得更糟?

Git不使用增量来存储差异,对于图像文件,这是不可能的。这意味着,如果一个被跟踪的映像发生了变化,它将使存储库的大小增加100%,并且由于映像已经被压缩,因此它们不能用git的打包进行压缩。

问题是,图像有多大,它们变化的频率有多高,通过这些可以估计存储库增长的速度有多快。然后您可以参考针对您的用例的存储库大小建议。

Git(以及Subversion)使用增量在存储库中存储文件。它们在Git和Subversion中都是二进制增量,可以很好地处理二进制文件。它们还可以找到匹配的字节,并且不依赖于任何分隔符,如换行符。

当subversion对文件的前一个版本进行增量操作时,Git最初存储全文,并且在gc操作期间选择一些可能的候选文件并选择最相似的文件进行增量操作。这意味着在部分或完全还原更改时,它可以(有时)利用单独的类似文件或旧版本。Git比对全文和增量都应用deflate压缩(Subversion没有)。

没有其他通用的压缩存储多版本文件的方法。当您需要保留旧版本的文件时,Git是最理想的选择。与专用备份系统相比,唯一的缺点是Git不能删除旧版本。

大多数图像都是压缩的,这通常意味着当存在差异时,文件的其余部分也会不同,因此它们不会从增量压缩中获得太多好处,而被压缩也不会从Git应用的额外压缩中获得太多好处。但是Git有一个机制来提供"干净"one_answers"涂抹"过滤器。在将文件存储到存储库之前应用"clean"过滤器,在检出文件时应用"smudge"过滤器。在PNG文件的情况下,您可以使用它们来重写文件而不压缩。如果它们实际上包含不同版本中相同的大部分,增量压缩将利用它们,然后git将应用压缩(使用相同的算法),因此您不会丢失任何东西。在实践中,我怀疑只有当您有许多图像并且它们的大部分实际上是相同的时,才值得麻烦。也适用于其他压缩格式,如OpenOffice文档

最新更新