### 目录的版本 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**,所有的账目会到版本库结算,并且目录的新修订版本号会正确设置。*因此,只有在更新之后才可以真正安全地说我们有了一个“完美的”修订版本目录。*在大多数时候,你的工作拷贝会保存“不完美的”目录修订版本。 同样的,如果你尝试提交目录的属性修改会有一个问题,通常情况下,提交应该会提高工作目录的本地修订版本号,但是再一次,这还是一个谎言,因为这个目录还没有添加和删除发生,因为还没有更新发生。*因此,在你的目录不是最新的时候不允许你提交属性修改。* 关于目录版本的更多讨论见[“修订版本混合的限制”一节](# "修订版本混合的限制")。