本手册旨在描述 Subversion 1.2。如果您正在运行更新版本的 Subversion,我们强烈建议您访问 https://svnbooks.subversion.org.cn/ 并参考适合您 Subversion 版本的版本手册。
Subversion 跟踪树结构,而不仅仅是文件内容。这是 Subversion 被写出来替代 CVS 的最大原因之一。
对于您,一个以前的 CVS 用户,这意味着什么?
svn add 和 svn delete 命令现在可以作用于目录,就像它们作用于文件一样。 svn copy 和 svn move 也是如此。但是,这些命令不会导致存储库中发生任何立即变化。相反,工作项目仅仅被“安排”添加或删除。在您运行 svn commit 之前不会发生任何存储库更改。
目录不再是哑容器;它们像文件一样有修订号。(或者更准确地说,谈论“修订版本 5 中的目录 foo/
”是正确的。)
让我们更详细地谈谈最后一点。目录版本控制是一个难题;因为我们想允许混合修订版本的工作副本,所以我们在滥用这种模型的程度上有一些限制。
从理论的角度来看,我们定义“目录 foo
的修订版本 5”表示目录条目和属性的特定集合。现在假设我们开始向 foo
中添加和删除文件,然后提交。说我们仍然有 foo
的修订版本 5 是一种谎言。但是,如果我们在提交后提升了 foo
的修订版本号,那也是一种谎言;因为我们还没有更新,所以可能还有我们还没有收到的对 foo
的其他更改。
Subversion 通过在 .svn
区域悄无声息地跟踪已提交的添加和删除来解决这个问题。当您最终运行 svn update 时,所有账户都会与存储库结算,并且目录的新修订版本号将被正确设置。 因此,只有在更新之后,我们才能真正安全地说您拥有目录的“完美”修订版本。 大多数情况下,您的工作副本将包含“不完美”的目录修订版本。
同样地,如果您尝试提交目录上的属性更改,也会出现问题。通常,提交会提升工作目录的本地修订版本号。但同样地,那将是一种谎言,因为目录可能还没有添加或删除,因为还没有进行更新。 因此,除非目录是最新的,否则不允许您提交目录上的属性更改。
有关目录版本控制限制的更多讨论,请参阅 名为“混合修订版本工作副本”的部分.