svn(subversion)是近年來崛起的版本管理工具,是cvs的接班人。目前,絕大多數開源軟件都使用svn作為代碼版本管理軟件。
工作流程
集中式管理的工作流程如下圖:
集中式代碼管理的核心是服務器,所有開發者在開始新壹天的工作之前必須從服務器獲取代碼,然後開發,最後解決沖突,提交。所有的版本信息都放在服務器上。如果脫離了服務器,開發者基本上可以說是無法工作的。下面舉例說明:
開始新壹天的工作:
1、從服務器下載項目組最新代碼。
2、進入自己的分支,進行工作,每隔壹個小時向服務器自己的分支提交壹次代碼(很多人都有這個習慣。因為有時候自己對代碼改來改去,最後又想還原到前壹個小時的版本,或者看看前壹個小時自己修改了哪些代碼,就需要這樣做了)。
3、下班時間快到了,把自己的分支合並到服務器主分支上,壹天的工作完成,並反映給服務器。
這就是經典的svn工作流程,從流程上看,有不少缺點,但也有優點。
缺點
1、服務器壓力太大,數據庫容量暴增。
2、如果不能連接到服務器上,基本上不可以工作,看上面第二步,如果服務器不能連接上,就不能提交,還原,對比等等。
3、不適合開源開發(開發人數非常非常多,但是Google app engine就是用svn的)。但是壹般集中式管理的有非常明確的權限管理機制(例如分支訪問限制),可以實現分層管理,從而很好的解決開發人數眾多的問題。
優點
1、管理方便,邏輯明確,符合壹般人思維習慣。
2、易於管理,集中式服務器更能保證安全性。
3、代碼壹致性非常高。
4、適合開發人數不多的項目開發。
5、大部分軟件配置管理的大學教材都是使用svn和vss。[3]
編輯本段安全性
SVN站在更高層次上對安全產品,從系統和控制的角度進行了"有機"和"無隙"的整合。
SVN是壹個安全虛擬網絡系統,它將系統整體的信息安全功能均衡合理地分布在不同的子系統中,使各子系統的功能得到最大限度的發揮,子系統之間互相補充,系統整體性能大於各子系統功能之和,用均衡互補的原則解決了"木桶原理"的問題。
SVN能在跨接Internet,Intranet,Extranet間的網絡所有端點實現全面的安全,而且還能提供基於企業策略的信息管理機制以充分有效地利用有限的帶寬。SVN可以滿足各種企業VPN的要求,通過為公司內部網絡、遠程和移動用戶、分支機構和合作夥伴提供基於Internet的安全連接。所以,我們可以將SVN看成是VPN、防火墻、基於企業策略的信息管理軟件集成在壹起的Internet安全的綜合解決方案。在這樣壹個網絡系統中,所有互聯網服務器端和客戶端都是安全的,並有壹個信息管理機制以不斷地通過這個外部網絡環境動態地分析及滿足客戶的特定帶寬需求。SVN提供了基於網絡實現的eBusiness 應用的安全服務,它包含:
對多種應用進行全面的安全認證;
支持多種認證及PKI;
功能強大並對用戶透明的通訊加密;
面向用戶的集中安全策略管理;
統壹跨接Internet、Intranet、Extranet的通訊。
編輯本段體系結構
帶有防火墻的VPN網關,它是壹個將防火墻和VPN技術緊密結合的網關產品;
SVN安全遠程客戶端軟件包,壹個功能強大的VPN客戶端軟件,支持臺式機用戶、遠程用戶和移動用戶,具有集中化管理的個人防火墻功能和VPN用戶的安全認證功能;
SVN證書管理模塊,壹個用於SVN的完整PKI解決方案,它將完善的CA和LDAP目錄服務器技術集成在壹起;
SVN硬件加密卡,可以通過硬件技術實現功能強大的各種算法以提高VPN的速度和性能;
SVN智能帶寬管理模塊,壹個基於企業策略的帶寬管理解決方案,可以智能地管理有限的帶寬資源,以確保用於企業重要應用的VPN性能可靠;
SVN冗余管理模塊,通過冗余網關集群和防火墻VPN內的SVN冗余模塊,對執行重要任務的VPN和防火墻應用在出現故障時實現無縫切換。
自動地址轉換模塊,壹個自動管理IP地址和命名的解決方案,通過提供IP地址服務的跟蹤和集中化管理,確保可靠地控制地址分配和提高TCP/IP管理效率;
SVN安全服務器軟件包,專門保護單個應用服務器安全的VPN網關軟件,它可以保護進行敏感操作的服務器免受攻擊和未授權的訪問,使客戶端建立與服務器間的安全認證和支持交換加密數據的連接;
SVN安全客戶端軟件包,它將基於狀態檢測的防火墻和基於IPSec的VPN客戶端軟件集成在客戶端機器上,通過提供集中管理的個人防火墻和對所有企業VPN用戶的安全認證,增強客戶端機器的安全性。它與 SVN安全遠程客戶端軟件功能相比,增強了客戶端的安全功能,如訪問控制和安全初始化控制等。
編輯本段發展歷史
在2000年初,開發人員要寫壹個CVS的自由軟件代替品,它保留CVS的基本思想,但沒有它的錯誤和局限,保留CVS的基本特性但去除CVS的bug和不好的特性。
在2000年2月,他們聯系《使用CVS開發開源項目》(Open Source Development
with CVS)(Coriolis, 1999)的作者Karl
Fogel,並征求了他是否願意在這個新的項目中擔任壹個角色。巧合的是,當時Karl已經和他的朋友Jim Blandy討論了壹個關於新的版本控制系
統的設計。在1995年,這兩人就成立了Cyclic
Software,壹個提供CVS的商業支持的軟件公司。雖然他們經營商業服務,但是仍然在每天都在工作中使用CVS。使用CVS的挫折感使得Jim認真
思考更好的方法來管理數據,不但確定名字為“Subversion”,而且完成了Subversion檔案庫的基礎設計。
當CollabNet的電話到來時,Karl立即答應了加入項目中,而且Jim讓他的雇主RedHat Software同意讓他在這個項目中不定期工作。CollabNet雇用了Karl和Ben Collins-Sussman,並在5月開始了詳細設計工作。在得到了來自CollabNet的Brian Behlendorf、Jason Robbins和Greg Stein(當時是壹名活躍在WebDAV/DeltaV規範過程的自由程序員)很多創意的幫助下,Subversion很快地引起了壹個活躍開發者社區的註意。它找出並歡迎很多同樣在CVS上受到挫折的社員能來為這個項目做點什麽。
Subversion 最初的設計Team定下了幾個簡單的目標。 它必須在功能上可取代 CVS,也就是說,
所有 CVS 可做到的事, 它都要能夠作到。 在修正最明顯的瑕疵的同時, 還要保留相同的開發模式。 還有, Subversion 應該要和
CVS 很相像, 任何 CVS 使用者只要花費少許的力氣, 就可以很快地上手。
經過十四個月的編碼後, Subversion 於2001年8月31日開始實現 “自行管理”。 也就是說, 開發人員不再使用 CVS 來管理 Subversion 的代碼, 而以 Subversion 自己來管理。
2009年11月,Subversion被Apache Incubator專案所接收。
2010年1月,正式成為Apache軟件基金會的壹個頂級專案,所以為Apache Subversion.[4]
目前Apache Subversion的主席為Greg Stein, 項目領導者Release manager為Wandisco公司。[4]
編輯本段優缺點
所有的文檔都顯示SVN可以取代CVS,同時SVN的問題和缺點都被隱藏了。不幸的是,我們並不認為SVN是CVS的替代品,盡管很多缺陷都被修改了。更有甚者,它甚至讓人重回CVS。
CVS和SVN的比較類似於比較C++和Java。很明顯CVS和SVN都遠比SourceSafe強大的多,如同C++和Java比Basic強大的
多。CVS代表了幾乎代碼控制系統的所有功能項,盡管有時他的實現並不很方便。SVN修正並添加了壹些CVS並不擁有功能。例如,創建標誌和分支
dubious,妳在編輯文件時其他人不會有任何通知。SVN並不是CVS的替代品,只是個不同的系統,類似於CVS。它有些特有的功能,足以作為采用它
的理由。這些功能使他更適合於開發環境,例如對PowerBuilder。下面妳可以找到兩者的相對優勢、劣勢。
1 存儲類型格式
CVS是個基於RCS文件的版本控制系統。每個CVS文件都不過是普通的文件,加上壹些額外信息。這些文件會簡單的重復本地文件的樹結構。因此,不必擔心有什麽數據損失,如果必要的話可以手工修改RCS文件。
SVN是基於關系數據庫的(BerkleyDB)或壹系列二進制文件的(FS_FS)。壹方面這解決了許多問題 (例如,並行讀寫***享文件)以及添加了許多新功能(例如運行時的事務特性。)。然而另壹方面,數據存儲由此變得不透明。
2 速度
CVS比較慢。
整體而言,由於架構實現的不同, SVN的確比CVS快很多。在網絡上它只傳輸很少的信息並支持更多的離線模式的功能。但這也是有代價的。速度的代價就是巨大的存儲(完全備份所有的工作文件)。
3 標誌&分支
SVN把采用標誌和分支而拋棄了其他三件東西,實際上這意味著他們把這個概念替換為在檔案庫內部復制文件或目錄以便
保存日誌。這樣壹來,無論標誌創建還是分支創建都只是倉庫內部的文件復制了。對分支而言:分支不過是在倉庫內部的壹個單獨的目錄而已了,不像早期還有些什
麽交錯。對標誌而言:已經不能對代碼加標誌了。在某種程度上說,SVN全文件編號補足了這個缺陷,SVN裏整個倉庫都有版本號,但不是針對單個文件。
4 元數據
CVS只允許存儲文件。
SVN允許壹個文件有任意多的可命名屬性,功能十分完全。
5 文件類型
CVS最初是為文本文件存儲而設計的。因此其他文件類型(二進制,統壹碼)文件的支持幾乎沒有,如需要的話則要有其他信息,並且客戶端服務器端都要調整。
SVN會關心所有的文件類型,不需要妳來手工操作。
6回滾
CVS允許任意的回滾,在任意壹個已遞交的版本上,盡管這要花些時間(所有的文件都要分別處理)。
SVN不允許遞交後回滾。建議把版本庫裏好的狀態版本加到末尾,覆蓋掉損壞的版本。而損壞的版本無論如何也是會存在數據庫裏的。(SVN的滾回操作實際上是merge操作)
7事務
CVS中的“零或壹”事務原則根本沒有實現。如果檢入幾個文件的話(加到服務器上),很有可能部分文件完成了,而另幾個沒有。作為壹個潛規則,手工糾正這些並且對余下的文件 (而不是所有文件)壹壹重復檢入。這樣這些文件將在兩階段中被檢入。SVN的確支持“零或壹”事務原則,這是SVN的壹大優勢。