我正在使用Mac上的Versions应用程序来处理我的文件的SVN存储库。我的工作副本大约是6 MB,但我的存储库只有1.4 MB,我在存储库中持有五个版本!
这怎么可能?
答案 0 :(得分:18)
SVN会压缩您的代码的一个版本,即每个版本之间的差异。这就是为什么它没有占用太多空间。
要保持存储库小, Subversion使用deltification(或 内部存储(deltified storage) 存储库本身。增量化 涉及编码表示 作为一个集合的一大块数据 与其他一些块的差异 数据的。如果这两个数据是 非常相似,这种神圣化 导致存储节省 令人满意的大块而不是占用 空间等于的大小 原始数据,它只占用足够的数据 空间说,“我看起来就像这样 这里的其他数据,除了 进行以下几项修改。“ 结果就是大部分 存储库数据往往是 笨重的,即内容 版本化的文件 - 存储在很多 尺寸比原来小 该数据的全文表示。 对于使用创建的存储库 Subversion 1.4或更高版本的空间 节约甚至更好 - 现在那些 文件的全文表示 内容本身就是压缩的。
可以找到更多详细信息here
答案 1 :(得分:8)
Nawaman的回答已经解释了存储库中的数据非常有效地压缩了。
故事的另一半是subversion将每个文件的pristine copy保留在工作副本的.svn
文件夹中。这使得subversion可以处理svn status
或svn diff
命令,而无需联系存储库服务器,但使工作副本的大小加倍。
答案 2 :(得分:5)
您的工作副本通常包含许多其他临时文件,例如对象代码和预编译头文件,这些文件不需要进行版本控制。我想如果你清理工作副本,或者做一个新的结账,它会小得多。
答案 3 :(得分:2)
以下是我能想到的几个原因 - svn将您的修订版本存储为更改集而不是版本化文件。 - svn在其后端(FSFS / BDB)中存储数据,后者具有一些减小大小的压缩技术。如果存储库具有更多基于文本的文件,则压缩越多,因此可以预期大小将急剧减小。 - 为了支持少量命令(如svn info,diff等)而没有网络连接(也有更快的结果),svn在.svn目录中保留了一些额外的信息。额外信息包括整个工作副本的副本。