Apache Subversion 是功能齊全的版本控制系統,最初設計為更好的 CVS。Subversion 已擴展超越其取代 CVS 的原始目標,但其基本模型、設計和介面仍深受該目標影響。即使在今天,Subversion 對 CVS 使用者來說仍然應該感到非常熟悉。
以下功能清單假設您讀者對版本控制的基本概念和版本控制系統的一般運作方式有一定了解。如果您正在尋找的功能未出現在此清單中,請隨時在我們的專案郵件清單中提出詢問 — 也許我們只是沒想到要將其列在這裡。如果 Subversion 真的缺少您需要的功能,您的意見回饋將有助於我們改善 Subversion,同時,也許我們可以協助您利用 Subversion 的功能滿足您的需求。
CVS 是一個相對基本的版本控制系統。在大部分情況下,Subversion 已達到或超越 CVS 的功能組,特別是這些功能在 Subversion 的特定設計中仍然適用。
Subversion 將目錄視為一級物件套用版本控制,就像檔案一樣。
複製和刪除是已套用版本控制的作業。重新命名也是一個已套用版本控制的作業,儘管有些怪癖。
Subversion 允許將任意元資料(「屬性」)附加到任何檔案或目錄。這些屬性是鍵值對,且與其附加的物件一樣套用版本控制。Subversion 還提供一種方式,可將任意鍵值屬性附加到版本(即已提交的變更集)。這些屬性未套用版本控制,因為它們會將元資料附加到版本空間本身,但它們可以隨時變更。
在整個提交成功之前,提交的任何部分都不會生效。修訂號碼是針對每個提交,而非針對每個檔案,而且提交的記錄訊息會附加到其修訂號碼,而非重複儲存在受該提交影響的所有檔案中。
沒有理由讓這些作業成本高昂,所以它們不會。
分支和標記都是根據基礎的「複製」作業來實作。複製會佔用少量恆定的空間。任何複製都是標記;而且如果你開始在複製上提交,那麼它也是分支。(這消除了 CVS 的「分支點標記」,因為它消除了讓分支點標記在第一個地方必要的區別。)
Subversion 1.5 導入合併追蹤:自動協助管理開發線之間的變更流動,以及將分支合併回其來源。合併追蹤的 1.5 版對常見情境有基本的支援;我們將在未來的版本中擴充此功能。
Subversion 支援(但不要求)鎖定檔案,以便在多個人嘗試編輯同一個檔案時,可以警告使用者。可以在編輯之前將檔案標記為需要鎖定,這種情況下,Subversion 會在取得鎖定之前,以唯讀模式呈現檔案。
Unix 使用者可以將符號連結置於版本控制之下。這些連結會在 Unix 工作副本中重新建立,但不會在 win32 工作副本中重新建立。
Subversion 會在檔案可執行時發出通知,如果該檔案置於版本控制中,其可執行性會在簽出到其他位置時保留。(Subversion 用來記住這一點的機制僅為 已版本化的屬性,因此,必要時可手動編輯可執行性,即使從未承認檔案可執行性的客戶端(例如,在 Microsoft Windows 下有錯誤的副檔名)也可以編輯。
Subversion 可使用基於 HTTP 的 WebDAV/DeltaV 通訊協定進行網路通訊,並使用 Apache 網路伺服器提供儲存庫端的網路服務。這讓 Subversion 在互通性方面優於 CVS,並允許以管理員已熟悉的方式提供特定功能(例如驗證、線路壓縮)。
Subversion 提供使用自訂通訊協定的獨立伺服器選項,因為並非所有人都想執行 Apache HTTPD 伺服器。獨立伺服器可作為 inetd 服務或在守護程式模式下執行,並提供與基於 HTTPD 的伺服器相同的驗證和授權功能層級。獨立伺服器也可透過 ssh 進行通道連線。
Subversion 指令列客戶端的輸出皆經過仔細設計,可供人類閱讀和自動解析;可編寫腳本是優先要務。
Subversion 使用 gettext() 顯示已翻譯的錯誤、資訊和說明訊息,依據目前的區域設定。
Subversion 指令列用戶端 (svn) 提供各種解決衝突變更的方式,包括互動式解決提示。此機制也透過 API 提供,以便其他用戶端(例如圖形用戶端)可以提供適合其介面的互動式衝突解決。
Subversion 提供一個公用程式 svnsync,用於透過推播或拉取同步唯讀從屬存放庫與主存放庫。
Subversion 1.5 引進寫入代理功能,允許從屬存放庫(請參閱 唯讀鏡像)自行處理所有讀取作業,同時將寫入作業傳遞至主存放庫。此功能僅適用於 Apache HTTPD (WebDAV) 伺服器選項。
Subversion 從一開始就設計為客戶端/伺服器,因此避免了困擾 CVS 的一些維護問題。程式碼結構為一組模組,具有定義良好的介面,設計為供其他應用程式呼叫。
Subversion 在二進位檔案和文字檔案上同樣有效率,因為它使用二進位差異演算法來傳輸和儲存連續版本。
一般而言,Subversion 作業所需時間與該作業產生的變更大小成正比,而非變更發生的專案絕對大小。
Subversion API 附帶了許多程式語言的繫結,例如 Python、Perl、Java 和 Ruby。(Subversion 本身是用 C 編寫的。)
Subversion 1.5 引入了變更清單,讓使用者可以在客戶端將已修改的檔案放入命名群組,然後透過指定特定群組來提交。對於在同一個目錄樹中同時處理邏輯上分開的變更集的人來說,變更清單可以幫助保持條理。
...即使我們設法讓此清單保持最新,也不可能列出每個小功能。請參閱 文件 以取得更多資訊。