目录的版本

优质
小牛编辑
133浏览
2023-12-01

目录的版本

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

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

  • svn addsvn delete现在也工作在目录上了,就像在文件上一样,还有svn copysvn move也一样。然而,这些命令会导致版本库即时的变化,相反,工作的项目只是“预定要”添加和删除,在运行svn commit之前没有版本库的修改。

  • 目录不再是哑容器了;它们也有文件一样的修订版本号。(更准确一点,谈论“修订版本5的目录foo/”是正确的。)

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

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

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

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

关于目录版本的更多讨论见“混合修订版本的工作拷贝”一节