本文档是为描述 Subversion 1.1 而写的。如果您运行的是更新版本的 Subversion,我们强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅与您 Subversion 版本相匹配的版本。

状态和更新的区别

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

cvs status 命令有两个目的:一是向用户显示工作副本中的任何本地修改,二是向用户显示哪些文件已过期。不幸的是,由于 CVS 的状态输出难以阅读,许多 CVS 用户根本没有使用此命令。相反,他们养成了运行 cvs updatecvs 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    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 (comes from another
       repository.  See the section called “svn:externals”)
?    Resource is not under version control
!    Resource is missing or incomplete (removed by another tool than
       Subversion)

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

有关 svn status 的更详细讨论,请参阅 名为“svn status”的部分