2011-08-26 66 views
3

当我学习Git时,我知道像SVN这样的VCS系统通常会将更改存储到基本版本的文件中。因此,作为一个合理的推论,如果我想检查文件A的版本4,SVN会在提交我想要的版本之前,将所有更改集合提交到版本4之前即时修补基本版本文件?VCS如SVN如何存储文件?

下面的图片可能会有所帮助。 Traditional VCS like SVN

总之,只有基本版本文件存储静态,所有其他版本都与基本文件和必要的变更集生成动态

对不对?

谢谢。

回答

3

从Subversion设计文档:

像许多其他版本控制系统,Subversion把变化 差异。它不会完整地复制节点;相反,它 作为一个完整的文本存储的最新修订和以前的修订为 连续的反向差异(单词“diff”在这里松散地使用 - 文件,它意味着vdeltas,目录,它意味着一种格式 表示对目录的更改)。

重要的一点是,该最新修订版本是碱和(反向)的diff是从向后存储。

http://svn.apache.org/repos/asf/subversion/trunk/notes/subversion-design.html#server.fs.struct

您也可以看看链接查看提交如何获取存储在库中。

+0

感谢manojlds为你的干净镜头。 – smwikipedia

+0

过去在BDB文件系统中使用了向后存储模型。更新的版本切换到正向存储以允许其他一些存储优化,这些存储优化在向后存储时证明非常困难。 –

+0

在Git中,情况并非如此。每个版本的完整快照都与元数据一起存储(如更改差异)。这种方式可以实现分布式VCS。因此SVN在空间复杂度方面更加优化,但由于需要沿着修订历史记录计算更改集,因此在版本解析中缺乏时间复杂性。 –

0

首先,您不能在Subversion中签出单个文件。你可以签出的最小部分是一个目录,但不会改变任何内容。

有关SVN如何工作以及如何存储的最佳文档可以阅读here

+0

感谢您的回复。我没有使用SVN很多。所以我希望有人能够给我一个确认我的猜测。 – smwikipedia

2

关于Subversion如何存储它的文件有很多文档,但事实是,你真的不应该知道。否则,您可能会试图在存储库管理器的后面进行这些更改。

存储库后端的结构是一个热点问题。有些团体认为,这应该有充分的文件记录,并在出现问题时能够很好地理解,并且用户可以修复它们。其他人则认为,结构永远不应该被触及,最大的问题通常来自最终用户,他们认为他们知道自己在做什么,挖掘存储库并摧毁一切。

Subversion版本库实际上有两种格式。一个使用FSFS文件格式(现在大多数人使用),但最初,Subversion使用Berkeley DB(BDB)来存储文件。 (它仍然可以,但你现在必须指定它)。将来,Subversion可能会切换到SQLite或MySQL作为其存储库后端。

这将允许Subversion开发人员从存储库结构中分离出执行代码。这将使添加新功能变得更加容易。例如,一个消灭命令有很多的色彩和哭泣。不幸的是,从Subversion开发人员告诉我的内容来看,在当前的FSFS文件结构中完成是不可能的。基于SQL的存储库会让这变得更容易。

+0

感谢您的背景资料。 – smwikipedia