包装到SVN提交和签出压缩

时间:2009-08-06 08:20:33

标签: svn file binary compression

  

可能重复:
  compress binaries in SVN ?

完全由同一作者复制compress binaries in SVN?


您好,

我想构建一个脚本来包装提交和签出的问题。 我想在提交之前压缩二进制文件,并在结账后立即解压缩。

这样做的方法是什么?是IMPORT命令而不是COMMIT preferd,因为没有delta比较?我知道它不太节省空间,但仍然?

感谢, 奥德。

2 个答案:

答案 0 :(得分:4)

Subversion的二进制增量算法之间的交互,跟踪文件中的压缩以及服务器自己内部使用的压缩都很复杂。

这是一个例子

我把x86 emacs二进制文件的副本(大约10MB,用gzip压缩的4MB)作为我的“二进制文件”。我写了一个小程序,它通过用随机数据覆盖随机位置的4个连续字节来“编辑”二进制文件。

然后我编写了三个脚本来模拟以下三种方式的100次提交:

使用存储库中的gzip压缩文件

对于每次重复:我们解压缩文件,然后执行编辑,然后重新压缩,然后检入。

最终存储库大小:9.6 MB

(这比我预期的要好,直到我意识到由于gzip的工作方式,随机编辑之前的字节(文件的一半,平均而言)将与之前版本的字节相同,即使在压缩之后也是如此。)

文件未在存储库中压缩

每次重复:我们只需执行编辑,然后检查更改。

最终存储库大小:5.1 MB

每次

从头开始导入文件

对于每次重复:我们将二进制文件(不使用svn副本)复制到新文件,编辑此副本,添加它并提交更改。这相当于导入,因为与该文件的上一个副本没有历史连接。

最终存储库大小:403 MB

为了让您了解Subversion的服务器端压缩,我重复了这个测试,只是这次我在客户端压缩二进制文件,然后每次添加和提交它们。

最终存储库大小:392 MB

所以,无论颠覆是做什么的,它看起来和gzip一样好。


您的问题听起来好像是假设客户端的压缩会对您有所帮助。它可能不会这样做。

根据我的经验,它只值得做:

  1. 文件很大。
  2. 您使用的压缩比Subversion管理的压缩要严格得多。 (例如,如果您使用的是bzip2或lzma)
  3. 该文件很少被编辑。

答案 1 :(得分:2)

压缩文件实际上会增加SVN存储库占用的空间。

为什么呢? SVN服务器尝试仅存储二进制差异产生的增量。因此,通常只需要存储已更改的文件部分。

但是,如果压缩文件,那么最轻微的更改将完全改变压缩结果。 SVN服务器需要为每次提交存储完整的压缩文件,而不仅仅是更改的部分。