本手册描述了 Subversion 1.1。如果您运行的是更新版本的 Subversion,我们强烈建议您访问 https://svnbook.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 时,所有账目都与存储库结算,并且目录的新版本号将被正确设置。 因此,只有在更新之后,才能真正地说您拥有目录的“完美”版本。 在大多数情况下,您的工作副本将包含“不完美”的目录版本。
类似地,如果您尝试提交目录上的属性更改,就会出现问题。 通常,提交会提高工作目录的本地版本号。 但同样,这也是谎言,因为可能存在目录尚未拥有的添加或删除,因为尚未进行更新。 因此,除非目录是最新的,否则不允许您提交目录上的属性更改。
有关目录版本控制限制的更多讨论,请参阅 名为“混合版本的限制”的部分。