27.5. Subversion 簡介

Subversion 是免費的開放式來源版本設定控制系統,而且普遍被視為 CVS 的後繼加強版,意即在 CVS 中已推出的功能,通常在 Subversion 中也有。另外特別推薦的原因是,它兼具了 CVS 的優點,卻不必忍受其缺點。許多功能已經在 節 27.1.3, "Subversion" 中都已簡要說明過。

27.5.1. 安裝 Subversion 伺服器

在伺服器上安裝儲存區資料庫是相單簡單的程序。Subversion 為此提供了專用的管理工具。建立新儲存區所要輸入的指令是:

svnadmin create /path/to/repository

其他的選項使用 svnadmin help 就可列出。與 CVS 大不相同的是,Subversion 不是以 RCS 為基礎,而是以不同的儲存區類型為基礎。一般常用的是 Berkeley Database 或 FSFS (一種直接使用檔案系統的儲存區)。請不要在遠端檔案系統上安裝儲存區,例如 NFS、AFS 或 Windows SMB。該資料庫需要 POSIX 鎖定機制,但是這些檔案系統不支援。

svnlook 指令會提供現有儲存區的資訊。

svnlook info /path/to/repository

伺服器必須經過設定才能讓不同的使用者存取儲存區。您可以使用 Apache 網頁伺服器以及 WebDAV 來執行此動作,也可以使用 svnserve。 這個伺服器會與 Subversion 包裝在一起。只要一啟動和執行 svnserve,就可以使用 svn://svn+ssh:// URL 來存取儲存區。呼叫 svn 時應該要自我驗證的使用者,可以設定在 /etc/svnserve.conf

要選用 Apache 或 svnserve 的決定取決於許多因素。建議您瀏覽 Subversion 的書籍。在 節 27.5.3, "如需詳細資訊" 中可以找到更多它的詳細資訊。

27.5.2. 使用與作業

使用 svn 指令 (與 cvs 相似) 來存取 Subversion 儲存區。使用 svn help 來取得指令的參數描述:


checkout (co): Check out a working copy from a repository.
usage: checkout URL[@REV]... [PATH]

  If specified, REV determines in which revision the URL is first
  looked up.

  If PATH is omitted, the basename of the URL will be used as
  the destination. If multiple URLs are given each will be checked
  out into a sub-directory of PATH, with the name of the sub-directory
  being the basename of the URL.
...

符合對應儲存區且由設定正確之伺服器所提供的內容,可供任何用戶端以下列指令之一存取:

svn list http://svn.example.com/path/to/project

或者

svn list svn://svn.example.com/path/to/project

使用 svn checkout 指令,將現有的專案儲存在目前的目錄中 (取出):

svn checkout http://svn.example.com/path/to/project nameofproject

「取出」會在用戶端上建立新的子目錄 nameofproject。然後就可以執行各項作業 (新增、複製、重新命名、刪除):

svn add file
svn copy oldfile newfile
svn move oldfile newfile
svn delete file

這些指令也可用在目錄上。Subversion 還可以記錄檔案或目錄的內容:

svn propset license GPL foo.txt

先前的範例會為 license 屬性設定 GPL 值。使用 svn proplist 顯示屬性:

svn proplist --verbose foo.txt
 Properties on 'foo.txt':
 license : GPL

使用 svn commit 將變更儲存至伺服器。另一個使用者可以使用 svn update 與伺服器同步化,在其工作目錄中併入您的變更。

與 CVS 不同的是,Subversion 不需要使用 svn status 存取儲存區,就可以顯示它的工作目錄狀態。本機變更會顯示在五個資料欄中,而第一個資料欄是最重要的:

' '

沒有變更。

'A'

物件已標示為新增。

'D'

物件已標示為刪除。

'M'

物件已修改。

'C'

物件發生衝突。

'I'

物件被忽略。

'?'

物件不是由版本設定控制所維護。

'!'

物件已報告為遺失。當未使用 svn 指令而刪除或移動物件時,就會出現旗標。

'~'

物件是被當做檔案來維護,但是物件曾被目錄所取代,或是目錄被物件所取代。

第二個資料欄會顯示屬性的狀態。在 Subversion 書籍中可以參閱所有其他欄的意義。

27.5.3. 如需詳細資訊

最主要的參考資料是位於 http://subversion.tigris.org/ 的 Subversion 專案首頁。可以在您安裝套件 subversion-doc 後,於 file:///usr/share/doc/packages/subversion/html/book.html 目錄中找到推薦的書籍,您也可以在線上找到,網址為 http://svnbook.red-bean.com/svnbook/index.html