区分状态和更新

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

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

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

Status

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

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    Resource is scheduled for Addition
D    Resource is scheduled for Deletion
M    Resource has local Modifications
C    Resource has Conflicts (changes have not been completely merged
       between the repository and working copy version)
X    Resource is eXternal to this working copy (may come from another
       repository).  See svn:externals”一节
?    Resource is not under version control
!    Resource is missing or incomplete (removed by another tool than
       Subversion)

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

Update

svn update会更新你的工作拷贝,只打印这次更新的文件。

Subversion将CVS的PU合并为U,当合并或冲突发生时,Subversion会简单的打印GC,而不是大段相关内容。

关于svn update的详细讨论,见“更新你的工作拷贝”一节