subversion如何在存储库中存储文件?

kaz*_*aki 48 svn berkeley-db repository fsfs

我阅读了颠覆书,我很清楚,subversion不存储单个文件,只存储增量以便最小化磁盘空间.Subversion也对二进制文件做了同样的事情(这曾经是CVS的一个巨大弱点).

但是我不明白确切的机制.当我提交文件时会发生什么?

  1. Subversion只存储diff(并且已经有旧版本)
  2. Subversion删除以前的版本,保存新文件并创建反向差异,以便在需要时"重新创建"旧版本.
  3. 还有一些我没有想过的东西.

第一种情况似乎最合乎逻辑.然而,这提出了另一个问题.如果我在subversion存储库中有一个包含1000个提交的文件,而一个新的开发人员检查出一个干净的副本,那么subversion必须获取原始版本(初始导入)并在返回结果之前对此应用1000个差异.它是否正确?对于保存最新版本的文件,是否存在某种缓存?

基本上我在哪里可以找到有关svn存储库内部的信息?

更新:显然,颠覆的后端在这方面发挥了重要作用.当时或写FSFS使用选项1,而BDB使用选项2.谢谢msemack!

Gre*_*ill 14

因为Subversion的存储库格式完全是内部的,所以他们可以自由地将表示从一个修订更改为下一个修订.我相信当前版本通常会存储反向增量(您的选项2),但也会定期存储完整的快照,因此在返回结果之前不必解析1000个差异.

Subversion 1.6发行说明中有一个关于文件系统存储改进的部分,其中有一些关于此的注释,以及指向其他源的链接.可以说Subversion数据存储的细节很复杂,可能会有所变化.

Subversion源代码树中还有一个设计文档,描述了在Subversion中使用skip deltas.通常,/ notes /目录包含有关Subversion内部的几个有用文档.


Ant*_*lev 8

Subversion设计文档(虽然已经过时了),你可以得到这个:

与许多其他版本控制系统一样,Subversion将更改存储为差异.它没有完整的节点副本; 相反,它将最新版本存储为全文,以及之前的版本作为一系列反向差异存储("diff"一词在这里松散使用 - 对于文件,它表示vdeltas,对于目录,它表示表示更改为目录).

我认为自那以后没有改变.

另外,请参阅冒泡方法.

  • 您链接到的设计文档是指旧的Berkeley DB数据库格式,SVN不再使用它作为默认值. (3认同)