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官方網站(頁面存檔備份,存於網際網路檔案館)