Subversion
Apache Subversion(簡稱SVN,svn),一個開放源代碼的版本控制系統,相較於RCS、CVS,它採用了分支管理系統,它的設計目標就是取代CVS。互聯網上很多版本控制服務已從CVS轉移到Subversion。
開發者 | Apache軟件基金會 |
---|---|
首次發布 | 2000年10月20日 |
當前版本 | 1.14.8(2024年10月8日[±] | )
源代碼庫 | |
編程語言 | C |
操作系統 | 跨平台 |
類型 | 版本控制 |
許可協議 | Apache許可證 |
網站 | 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
ALM(Application Lifecycle Management)是軟件配置管理的未來趨勢,各種軟件版本工具包括subversion都要集成到其中。目前UberSVN是唯一的以Subversion為基礎構建的ALM平台,並實現了協同開發以及社交化編碼。
不足
- 只能設置目錄的訪問權限,無法設置單個文件的訪問權限(目前可以通過輔助模塊比如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官方網站(頁面存檔備份,存於網際網路檔案館)