SVN等VCS如何存储文件?

时间:2011-08-26 14:34:49

标签: svn version-control

当我正在学习Git时,我发现像SVN这样的其他 VCS系统通常会将更改存储到基本版本的文件中。因此,作为一个逻辑推论,如果我想查看文件A的版本4,SVN将动态修补基本版本文件,所有更改集提交到版本4,然后交付我想要的版本?

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

简而言之,只有基本版本文件存储静态,所有其他版本都是动态生成的基本文件和必要的更改集。

正确?

感谢。

3 个答案:

答案 0 :(得分:3)

来自Subversion Design doc:

  

与许多其他版本控制系统一样,Subversion将更改存储为   差异。它没有完整的节点副本;相反,它   将最新版本存储为全文,并将以前的版本存储为   反向差异的继承(在这里松散地使用“差异”一词 -   对于文件,它意味着vdeltas,对于目录,它意味着一种格式   表示对目录的更改。)

重要的一点是,最新的版本是基础,而(反向)差异是从那个向后存储的。

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

您还可以查看链接,了解提交如何存储在存储库中。

答案 1 :(得分:2)

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

存储库后端的结构是一个热门问题。一些团体表示,如果存在问题,应该对此进行详细记录并充分理解,并且用户可以修复它们。其他人说,永远不应该触及这个结构,而最大的问题通常来自最终用户,他们认为他们知道自己在做什么,搞砸了存储库,并摧毁了一切。

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

这将允许Subversion开发人员从存储库结构中分离出执行代码。这将使添加新功能变得更加容易。例如,对于一个删除命令,已经有很多色调和哭泣。不幸的是,从Subversion开发人员告诉我的情况来看,在当前的FSFS文件结构中根本不可能做到。基于SQL的存储库可以使这更容易。

答案 2 :(得分:0)

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

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