### 区分状态和更新 在Subversion,我们已经设法抹去**cvs status**和**cvs update**之间的混乱。 **cvs status**命令有两个目的:第一,显示用户在工作拷贝的所有本地修改,第二,显示给用户哪些文件是最新的。很不幸,因为CVS难以阅读的状态输出,许多CVS用户并没有充分利用这个命令的好处。相反,他们慢慢习惯运行**cvs update**或**cvs update -n**来快速查看区别,如果用户忘记使用`-n`选项,副作用就是将还没有准备好处理的版本库修改合并到工作拷贝。 对于Subversion,我们通过修改**svn status**的输出使之同时满足阅读和解析的需要来努力消除这种混乱,同样,**svn update**只会打印将要更新的文件信息,而*不是*本地修改。 **svn status**打印所有本地修改的文件,缺省情况下,不会联系版本库,然而这个命令接受一些选项,如下是一些最常用的: `-u` 联系版本库来确定,然后显示,过时的信息。 `-v` 显示*所有*版本控制之下的条目。 `-N` 非递归运行(不传递到子目录)。 **status**命令有两种输出格式,缺省是“简短”格式,本地修改看起来是这样: ~~~ % svn status M ./foo.c M ./bar/baz.c ~~~ 如果你指定`--show-updates`(`-u`),输出会使用比较长的格式: ~~~ % svn status -u M 1047 ./foo.c * 1045 ./faces.html * - ./bloo.png M 1050 ./bar/baz.c Status against revision: 1066 ~~~ 在这个例子里,有两个新列,如果文件或目录已经过期了,第二列会显示星号。第三列显示工作拷贝项目的修订版本号,在上面的例子里,星号表示`faces.html`会在更新时更新,而`bloo.png`是在版本库新加的文件。(`bloo.png`前面的`-`表示它不曾存在与工作拷贝。) 最后,你会想看一个常见状态码的快速总结: ~~~ A 资源预定要添加 D 资源预定要删除 M 资源有本地修改 C 资源发生冲突(修改不能完全在版本库和 工作拷贝之间合并) X 资源在工作拷贝之外(来自其他版本库, 见“ ~~~ svn:externals ~~~ ”一节) 资源不在版本控制之下 ! 资源丢失或者不完整(被Subversion以外的工具删除) ~~~ Subversion合并了CVS的`P`和`U`代码为`U`,当一个合并或冲突发生,Subversion只会简单得打印`G`或`C`,而不是一段完整的描述语句。 关于**svn status**的详细讨论见[“**svn status**”一节]( "svn status")。