在Subversion,我們已經設法抹去cvs status和cvs update之間的混亂。
cvs status命令有兩個目的:第一,顯示用戶在工作副本的所有本地修改,第二,顯示給用戶哪些文件是最新的。很不幸,因為CVS難以閱讀的狀態輸出,許多CVS用戶並沒有充分利用這個命令的好處。相反,他們慢慢習慣運行cvs update或cvs -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 「外部定義」一節
? Resource is not under version control
! Resource is missing or incomplete (removed by another tool than
Subversion)
關於svn status的詳細討論,見「查看你的修改概況」一節。
svn update會更新你的工作副本,只打印這次更新的文件。
Subversion將CVS的P和U合併為U,當合併或衝突發生時,Subversion會簡單的打印G或C,而不是大段相關內容。
關於svn update的詳細討論,見「更新你的工作副本」一節。