4. 区分状态和更新

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

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

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

4.1. 状态

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

-u

访问版本库检测并显示过期的信息。

-v

显示所有版本控制下的文件。

-N

非递归方式运行(不会访问子目录)。

svn 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前面的版本号为空,表示这个文件在工作副本不存在)。

For a more detailed discussion of svn status, including an explanation of the status codes shown in the previous example, see 第 4.3.1 节 “查看你的修改概况”.

4.2. 更新

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

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

关于 svn update 的详细讨论,参见第 4.1 节 “更新你的工作副本”