本文档正在编写中 - 内容可能发生重大变化 - 并且可能无法准确描述任何已发布版本的 Apache™ Subversion® 软件。将此页面添加为书签或以其他方式将其推荐给他人可能不是一个好主意。请访问 https://svnbook.subversion.org.cn/ 获取此书籍的稳定版本。
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
时,所有帐户都将在存储库中结算,并且目录的新版本号将被正确设置。 因此,只有在更新之后,才能真正说您拥有目录的 “完美” 版本。 在大多数情况下,您的工作副本将包含 “不完美” 的目录版本。
同样,如果您尝试对目录提交属性更改,也会出现问题。通常情况下,提交会将工作目录的本地版本号提高。但同样,那也是谎言,因为目录可能存在尚未拥有的添加或删除,因为尚未进行更新。 因此,除非目录是最新的,否则不允许您对目录提交属性更改。
有关目录版本控制的限制的更多讨论,请参阅 名为“混合版本工作副本”的部分。