本文件旨在描述 Subversion 1.4。如果您使用的是更新版本的 Subversion,我们强烈建议您访问 https://svnbook.subversion.org.cn/ 并参考与您的 Subversion 版本相对应的版本。

状态与更新的区别

在 Subversion 中,我们试图消除 cvs statuscvs update 命令之间的许多混乱。

cvs status 命令有两个目的:首先,向用户显示工作副本中的任何本地修改;其次,向用户显示哪些文件已过时。不幸的是,由于 CVS 的状态输出难以阅读,许多 CVS 用户根本没有使用此命令。相反,他们养成了运行 cvs updatecvs -n update 来快速查看其更改的习惯。如果用户忘记使用 -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 旁边没有修订版号,表示它尚未存在于工作副本中。)

此时,您应该快速查看 svn status 中所有可能的状态代码列表。以下是您将看到的一些更常见的状态代码:

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 the section called “Externals Definitions”
?    Resource is not under version control
!    Resource is missing or incomplete (removed by another tool than
       Subversion)

有关 svn status 的更详细讨论,请参阅 “查看更改概述”部分.

更新

svn update 更新您的工作副本,并且只打印有关它更新的文件的信息。

Subversion 已将 CVS PU 代码合并为一个 U。当发生合并或冲突时,Subversion 只打印 GC,而不是关于它的整句话。

有关 svn update 的更详细讨论,请参阅 “更新您的工作副本”部分.