区分状态和更新

在Subversion,我们已经设法抹去cvs statuscvs update之间的混乱。

cvs status命令有两个目的:第一,显示用户在工作拷贝的所有本地修改,第二,显示给用户哪些文件是最新的。很不幸,因为CVS难以阅读的状态输出,许多CVS用户并没有充分利用这个命令的好处。相反,他们慢慢习惯运行cvs updatecvs update -n来快速查看区别,如果用户忘记使用-n选项,副作用就是将还没有准备好处理的版本库修改合并到工作拷贝。

对于Subversion,我们通过修改svn status的输出使之同时满足阅读和解析的需要来努力消除这种混乱,同样,svn update只会打印将要更新的文件信息,而不是本地修改。

svn status打印所有本地修改的文件,缺省情况下,不会联系版本库,然而这个命令接受一些选项,如下是一些最常用的:

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的PU代码为U,当一个合并或冲突发生,Subversion只会简单得打印GC,而不是一段完整的描述语句。

关于svn status的详细讨论见svn status”一节