当我学习Git时,我知道像SVN这样的VCS系统通常会将更改存储到基本版本的文件中。因此,作为一个合理的推论,如果我想检查文件A的版本4,SVN会在提交我想要的版本之前,将所有更改集合提交到版本4之前即时修补基本版本文件?VCS如SVN如何存储文件?
下面的图片可能会有所帮助。
总之,只有基本版本文件存储静态,所有其他版本都与基本文件和必要的变更集生成动态。
对不对?
谢谢。
当我学习Git时,我知道像SVN这样的VCS系统通常会将更改存储到基本版本的文件中。因此,作为一个合理的推论,如果我想检查文件A的版本4,SVN会在提交我想要的版本之前,将所有更改集合提交到版本4之前即时修补基本版本文件?VCS如SVN如何存储文件?
下面的图片可能会有所帮助。
总之,只有基本版本文件存储静态,所有其他版本都与基本文件和必要的变更集生成动态。
对不对?
谢谢。
从Subversion设计文档:
像许多其他版本控制系统,Subversion把变化 差异。它不会完整地复制节点;相反,它 作为一个完整的文本存储的最新修订和以前的修订为 连续的反向差异(单词“diff”在这里松散地使用 - 文件,它意味着vdeltas,目录,它意味着一种格式 表示对目录的更改)。
重要的一点是,该最新修订版本是碱和(反向)的diff是从向后存储。
http://svn.apache.org/repos/asf/subversion/trunk/notes/subversion-design.html#server.fs.struct
您也可以看看链接查看提交如何获取存储在库中。
首先,您不能在Subversion中签出单个文件。你可以签出的最小部分是一个目录,但不会改变任何内容。
有关SVN如何工作以及如何存储的最佳文档可以阅读here。
感谢您的回复。我没有使用SVN很多。所以我希望有人能够给我一个确认我的猜测。 – smwikipedia
关于Subversion如何存储它的文件有很多文档,但事实是,你真的不应该知道。否则,您可能会试图在存储库管理器的后面进行这些更改。
存储库后端的结构是一个热点问题。有些团体认为,这应该有充分的文件记录,并在出现问题时能够很好地理解,并且用户可以修复它们。其他人则认为,结构永远不应该被触及,最大的问题通常来自最终用户,他们认为他们知道自己在做什么,挖掘存储库并摧毁一切。
Subversion版本库实际上有两种格式。一个使用FSFS文件格式(现在大多数人使用),但最初,Subversion使用Berkeley DB(BDB)来存储文件。 (它仍然可以,但你现在必须指定它)。将来,Subversion可能会切换到SQLite或MySQL作为其存储库后端。
这将允许Subversion开发人员从存储库结构中分离出执行代码。这将使添加新功能变得更加容易。例如,一个消灭命令有很多的色彩和哭泣。不幸的是,从Subversion开发人员告诉我的内容来看,在当前的FSFS文件结构中完成是不可能的。基于SQL的存储库会让这变得更容易。
感谢您的背景资料。 – smwikipedia
感谢manojlds为你的干净镜头。 – smwikipedia
过去在BDB文件系统中使用了向后存储模型。更新的版本切换到正向存储以允许其他一些存储优化,这些存储优化在向后存储时证明非常困难。 –
在Git中,情况并非如此。每个版本的完整快照都与元数据一起存储(如更改差异)。这种方式可以实现分布式VCS。因此SVN在空间复杂度方面更加优化,但由于需要沿着修订历史记录计算更改集,因此在版本解析中缺乏时间复杂性。 –