This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.

状态与更新的区别

Subversion 尽最大的努力去消除 cvs statuscvs update 之间的混乱关系.

命令 cvs status 包含两个目的: 第一是显示工作 副本里的本地修改, 第二是显示哪些文件是过时的. 但不幸的是, 由于 cvs status 的输出信息难以阅读, 因此很多用户根本不 会用它, 而是渐渐地养成了一种习惯, 那就是用 cvs updatecvs -n update 来替代 cvs status. 如果用户忘记加上选项 -n, 那么 cvs update 将会把仓库中的修改合并到本地, 而用户此时可能还没有 准备好合并.

为消除这种混乱的状况, Subversion 让 svn status 的输出信息既容易被人阅读, 也容易被程序解析. 而且 svn update 只打印被更新的文件信息, 不再 输出与本地修改有关的信息.

状态

svn status 会输出所有的具有本地修改的文件, 而且在默认情况下, 它不会去访问仓库. 该命令可授受的选项比较多, 但 其中最常用的选项有以下这些:

-u

访问仓库, 从而判断出工作副本中的哪些文件已经过时了, 并 输出这些过时的文件.

-v

显示 所有的, 被版本控制的项目.

-N

非递归执行 (即不要对子目录执行操作).

命令 svn status 的输出格式有 2 种, 默认是 格式, 此时含有本地修改的文件将显示成:

$ 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

在上面的例子中新出现了两列. 如果文件或目录已经过时, 那么输出中的第 2 列将显示一个星号; 第 3 列是项目在工作副本中的版本号. 从输出中可以看 到, 如果我们更新工作副本, faces.html 将会被更新, 而 bloo.png 则是仓库中新增的一个文件. (bloo.png 的左边没有出现版本号明该文件在工作副本 中还不存在.)

关于 svn status 的更多介绍, 包括如何理解 输出信息中的状态码, 见 “查看修改的整体概述”一节.

更新

命令 svn update 会更新你的工作副本, 并输出 与被更新文件有关的信息.

Subversion 把 CVS 的 PU 这两个状态码合并成一个状态码, U. 如果在更新时发生 合并或冲突, Subversion 将只打印状态码 GC, 而不是一整句话.

关于 svn update 的更多介绍, 见 “更新工作副本”一节.