區分狀態和更新

在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 「外部定義」一節
?    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的詳細討論,見「更新你的工作副本」一節