2. 目录的版本

Subversion 会记录目录树的结构,不仅仅是文件的内容。这是编写 Subversion 替代 CVS 最重要的一个原因。

以下是对你这意味着什么的说明,作为一个前CVS用户:

让我们再讨论最后一点。目录版本化是一个困难的问题;因为我们希望允许混合版本的工作副本,有一些防止我们滥用这个模型的限制。

从理论观点,我们定义目录foo的版本 5 意味着一组目录条目和属性。现在假定我们从 foo 开始添加和删除文件,然后提交。如果说我们还有 foo 的版本 5 就是一个谎言。然而,如果说我们在提交之后增加了 foo 的版本号码,这也是一个谎言;还有一些 foo 的修改我们没有得到,因为我们还没有更新。

Subversion 通过在 .svn 区域偷偷的纪录添加和删除来处理这些问题,当你最后运行 svn update,所有的变更都会与版本库同步,并且目录的新版本号会正确设置。因此,只有在更新之后才可以真正安全地说我们有了一个完美的修订版本目录。在大多数时候,你的工作副本会保存不完美的目录修订版本。

同样的,如果你尝试提交目录的属性修改会有一个问题。通常情况下,提交应该会提高工作目录的本地修订版本号。但是再次说,这还是一个谎言,因为这个目录还没有发生添加和删除,因为还没有发生更新。因此,在你的目录不是最新的时候不允许你提交属性修改。

关于目录版本的更多讨论见第 2.4.3 节 “混合版本的工作副本”