Subversion仓库与工作副本相比,文件大小较小?

13

我在Mac上使用Versions应用程序处理我的文件的SVN版本库。我的工作副本大小约为6 MB,但是我的版本库只有1.4 MB,并且我在版本库中保存了五个版本!

为什么会这样呢?


压缩可能可以解释这个问题,但是我并不确定。对于纯文本来说,75% 的压缩比并不罕见。 - Matthew Scharley
(注意,它实际上只有约75%,因为SVN仅保存更改,而不是每个版本的完整副本) - Matthew Scharley
4个回答

19

SVN使用差异压缩技术来存储代码的每一个版本之间的差异,因此它不占用太多空间。

为了保持仓库较小,Subversion在仓库本身中使用增量存储技术。增量存储涉及将数据块的表示编码为针对某些其他数据块的一系列差异。如果两个数据块非常相似,则这种增量存储会为增量存储的数据块带来存储节省-与占据原始数据大小相等的空间不同,它只占据足够的空间以表达“我看起来就像这里面的另一块数据,除了以下几处变化”。结果是,大部分仓库数据往往会占用较多空间-即版本文件的内容比原始全文表示形式要小得多。对于使用 Subversion 1.4 或更高版本创建的仓库,节省的空间甚至更多-现在文件内容的全文表示形式也已经被压缩。

更多详细信息可以在此处找到。


9
Nawaman的回答已经解释了,仓库中的数据被压缩得非常高效。
另一半的故事是,Subversion在您的工作副本的.svn文件夹中保留了每个文件的原始副本。这使得Subversion能够处理svn statussvn diff命令而不需要联系仓库服务器,但它会使您的工作副本大小翻倍

5

你的工作副本通常包含许多额外的临时文件,例如目标代码和预编译头文件,这些文件不需要进行版本控制。我猜如果你清理工作副本,或者重新检出,它会变得更小。


2
这是正确的,但正如Nawaman和wcoenen所解释的那样,即使是一个新检出的干净工作副本,没有生成的文件(如预编译头文件和目标代码),它的大小也可能比存储库大得多:工作副本有两个未压缩的文件副本(工作和原始),而存储库只有每个文件的1个压缩副本+增量更改(如果更改是局部的,则可以非常小)。 - Stephen C. Steel

2
以下是我能想到的几个原因: - SVN将您的修订版本存储为更改集而不是版本化文件。 - SVN将数据存储在其后端(FSFS / BDB)中,该后端具有一些压缩技术,可以减小大小。如果仓库具有更多基于文本的文件,则压缩越多,因此可以预期大小会大幅减小。 - 为了支持一些命令(如svn info,diff等)无需网络连接(同时获得更快的结果),svn在.svn目录中维护一些额外信息。额外信息包括整个工作副本的副本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接