Subversion

Apache Subversion（簡稱SVN，svn），一個開放原始碼的版本控制系統，相較於RCS、CVS，它採用了分支管理系統，它的設計目標就是取代CVS。網際網路上很多版本控制服務已從CVS轉移到Subversion。

## 歷史

CollabNet於2000年創建SVN項目，意在寫出一款近似CVS操作方式的版本控制系統。只不過，此款產品針對CVS的bug和一些缺失的功能，進行了修正和補充。

2000年2月，他們聯繫了Open Source Development with CVS（Coriolis, 1999）的作者Karl Fogel，問他是否願意為這個新專案工作。巧的是這時Karl已經在和他的朋友Jim Blandy討論一個新的版本控制系統的設計。在1995年，兩人開了一家提供CVS技術支持的公司，叫作Cyclic Software。雖然公司已經賣掉了，他們仍然在日常工作中使用CVS。在使用CVS時受到的束縛已經讓Jim開始仔細思考管理版本化數據的更好的路子。他不僅已經起好了名字「Subversion」，而且有了Subvesion資料庫的基本設計。當CollabNet打來電話時，Karl立刻同意為這個專案工作。Jim徵得他的老闆RedHat Software的同意，讓他投入這個專案，而且沒有時間限制。CollabNet雇用了Karl和Ben Collins-Sussman，從5月份開始詳細設計。由於Greg Stein和CollabNet的Brian Behlendorf和Jason Robbins作了恰當的推動，Subversion很快吸引了一個活躍的開發人員社群。這說明了許多人有相同的受制於CVS的經驗，他們對終於有機會對它做點什麼表示歡迎。

最初的設計團隊設定了幾個簡單的目標。他們並不想在版本控制方法論上有新突破。他們只想修補CVS。他們決定Subversion應該與CVS相似，保留相同的開發模型，但不複製CVS最明顯的缺點。雖然它不一定是CVS的完全的替代品，但它應該和CVS相似，從而任何CVS使用者可以不費什麼力氣的轉換過來。

經過14個月的編碼，在2001年8月31號，Subversion可以「自我寄生」了。就是說，Subversion開發人員停止使用CVS管理Subversion的原始碼，開始使用Subversion代替。

雖然CollabNet發起了這個項目，而且仍然資助一大部分的工作（它為一些專職的Subversion開發人員發薪水）。但是Subversion像大部分開放源碼的項目一樣運作，由一個鬆散透明，鼓勵能者多勞的規則管理。CollabNet的版權許可證和Debian FSG完全兼容。換句話說，任何人可以免費下載，修改，按自己的意願重新分發Subversion，而不必得到來自CollabNet或其他任何人的許可。

2009年11月，Subversion被Apache Incubator專案所接收。

2010年1月，正式成為Apache軟體基金會的一個頂級專案。

## 特性

- 統一的版本號。CVS是對每個文件順序編排版本號，在某一時間各文件的版本號各不相同。而Subversion下，任何一次提交都會對所有文件增加到同一個新版本號，即使是提交並不涉及的文件。所以，各文件在某任意時間的版本號是相同的。版本號相同的文件構成軟體的一個版本。
- 原子提交。一次提交不管是單個還是多個文件，都是作為一個整體提交的。在這當中發生的意外例如傳輸中斷，不會引起資料庫的不完整和數據損壞。
- 重命名、複製、刪除文件等動作都保存在版本歷史記錄當中。
- 對於二進制文件，使用了節省空間的保存方法（簡單的理解，就是只保存和上一版本不同之處）。
- 目錄也有版本歷史。整個目錄樹可以被移動或者複製，操作很簡單，而且能夠保留全部版本記錄。
- 分支的開銷非常小。
- 最佳化過的資料庫訪問，使得一些操作不必訪問資料庫就可以做到。這樣減少了很多不必要的和資料庫主機之間的網路流量。
- 支持元數據（Metadata）管理。每個目錄或文件都可以定義屬性（Property），它是一些隱藏的鍵值對，使用者可以自定義屬性內容，而且屬性和文件內容一樣在版本控制範圍內。
- 支持FSFS和Berkeley DB兩種資料庫格式。

## 企業級subversion

### Subversion Multisite

對於企業級應用，subversion還有其先天不足，比如對於多個地點的並行開發。Wandisco公司為此開發了subversion multisite，實現異地對等伺服器自動同步，支持並行開發以及異地備份。

### 基於Subversion的ALM平台——UberSVN

UberSVN 以 Subversion 為基礎構建的ALM（Application Lifecycle Management）平台，並實現了協同開發以及社交化編碼。

## 不足

- 只能設置目錄的訪問權限，無法設置單個文件的訪問權限（目前可以通過輔助模塊比如wandisco access control實現單文件訪問）。
- 資料庫為二進位格式，無法方便的利用其它軟體讀取資料庫的內容。

## 使用情況

雖然在2006年Subversion的使用族群仍然遠少於傳統的CVS，但已經有許多開放原碼團體決定將CVS轉換為Subversion。已經轉換使用Subversion的包括了FreeBSD、Apache Software Foundation、KDE、GNOME、GCC、Python、Samba、Mono以及許多團體。許多開發團隊換用Subversion是因為Trac、SourceForge、CollabNet、CodeBeamer等專案協同作業軟體以及Eclipse、NetBeans等IDE提供Subversion的支援整合。除此之外，一些自由軟體開發的協作網如SourceForge.net除了提供CVS外，現在也提供專案開發者使用Subversion作為原始碼管理系統，JavaForge、Google Code以及BountySource則以Subversion作為官方的原始碼管理系統。

2009年，絕大多數CVS服務已經改用SVN。此時CVS早已經停止維護。不過CVS也有了合適的替代品。

## SVN客戶端圖形化軟體

### TortoiseSVN

在windows非常受到歡迎的一套客戶端軟體，它與檔案總管整合得相當不錯，可以透過檔案總管在檔案或目錄上用滑鼠右鍵的選單完成SVN的操作。

TortoiseSVN官方網站

### SnailSVN

Mac OS X 平台下類似 TortoiseSVN 的圖形化 SVN 客戶端，可自動標記文件狀態，並通過右鍵菜單提供各種常用 SVN 功能。

下載 SnailSVN (Mac App Store)

### Ankhsvn

將subversion的操作整合進Visual Studio的SVN 客戶端軟體。

Ankhsvn官方網站

### Subclipse

將Subversion的操作整合進Eclipse的SVN 客戶端軟體。

Subclipse官方網站

### Subversive

和Subclipse相同。

Subversive官方網站

### SCPlugin

Mac OS下類似TortoiseSVN的軟體。

SCPlugin官方網站

### SVNx

Mac OS X下的一款客戶端軟體。

SVNx官方網站

### eSVN

Unix下類似TortoiseSVN的軟體。

eSVN官方網站

### kdesvn

Linux下使用KDE桌面管理下類似TortoiseSVN的軟體。

kdesvn官方網站

### RabbitVCS

Linux下使用Gnome桌面管理下類似TortoiseSVN的軟體。

RabbitVCS官方網站

### GTalkabout

Windows下整合了討論功能的客戶端軟體。

GTalkabout官方網站

## 基本資料

- 開發者：Apache軟體基金會
- 發行日期：2000年10月20日
- 程式語言：C
- 作業系統：跨平台
- 類型：版本控制
- 許可協議：Apache許可證