SVN

SVN

SVN是Subversion的簡稱,是一個開放原始碼的版本控制系統,相較於RCS、CVS,它採用了分支管理系統,它的設計目標就是取代CVS。網際網路上很多版本控制服務已從CVS遷移到Subversion。說得簡單一點SVN就是用於多個人共同開發同一個項目,共用資源的目的。

基本介紹

  • 中文名:SVN
  • 外文名:Subversion
  • 本質:版本管理工具
  • 來源:是cvs的重寫版和改進版
  • 地位:多數開源軟體使用svn作為代碼庫
  • 運行方式:獨立伺服器、基於Apache
運行方式,數據存儲,工作流程,優缺點,與Vss,缺點,優點,安全性,體系結構,發展歷史,遠程改密,其他,

運行方式

svn伺服器有2種運行方式:獨立伺服器和藉助apache運行。兩種方式各有利弊,用戶可以自行選擇。

數據存儲

svn存儲版本數據也有2種方式:BDB(一種事務安全型表類型)和FSFS(一種不需要資料庫的存儲系統)。因為BDB方式在伺服器中斷時,有可能鎖住數據,所以還是FSFS方式更安全一點。
詳見subversion

工作流程

集中式管理的工作流程如下圖:
集中式代碼管理的核心是伺服器,所有開發者在開始新一天的工作之前必須從伺服器獲取代碼,然後開發,最後解決衝突,提交。所有的版本信息都放在伺服器上。如果脫離了伺服器,開發者基本上可以說是無法工作的。下面舉例說明:
開始新一天的工作:
SVN
1、從伺服器下載項目組最新代碼。
2、進入自己的分支,進行工作,每隔一個小時向伺服器自己的分支提交一次代碼(很多人都有這個習慣。因為有時候自己對代碼改來改去,最後又想還原到前一個小時的版本,或者看看前一個小時自己修改了哪些代碼,就需要這樣做了)。
3、下班時間快到了,把自己的分支合併到伺服器主分支上,一天的工作完成,並反映給伺服器。
這就是經典的svn工作流程,從流程上看,有不少缺點,但也有優點。

優缺點

所有的文檔都顯示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會關心所有的檔案類型,不需要你來手工操作。
CVS允許任意的回滾,在任意一個已遞交的版本上,儘管這要花些時間(所有的檔案都要分別處理)。
SVN不允許遞交後回滾。建議把版本庫里好的狀態版本加到末尾,覆蓋掉損壞的版本。而損壞的版本無論如何也是會存在資料庫里的。(SVN的滾回操作實際上是merge操作)
CVS中的“零或一”事務原則根本沒有實現。如果檢入幾個檔案的話(加到伺服器上),很有可能部分檔案完成了,而另幾個沒有。作為一個潛規則,手工糾正這些並且對餘下的檔案 (而不是所有檔案)一一重複檢入。這樣這些檔案將在兩階段中被檢入。SVN的確支持“零或一”事務原則,這是SVN的一大優勢。

與Vss

1. 支持重命名,這對 Java 開發來說非常重要
為了得到更好的代碼,開發中需要經常進行重構,重構就經常涉及到檔案的重構名,而重命名 CVS中是不被支持的。
2. 開發的時候不一定要鎖定。
一方面導致重構不方便,另一方面,不能離線開發,使用 SVN就不同,可以帶回家繼續開發,回來後,提交就行了。
3. 多平台。
可以支持多個平台下的操作
4. 更好的客戶端支持。
Eclipse 中的 VSS Plugin 不如它的 SVN Plugin 好用。一個在 Windows 下用的 SVN客戶端TortoiseSVN 也比VSS 的客戶端好用(VSS 只有微軟提供的一個 GUI 客戶端)。
5. 更好地與外圍工具集成。
各種各樣的外圍工具(主要是伺服器端),滿足多種需要。如果有需要,也可以自己寫外掛程式或管理腳本,開放的架構,允許我們這樣做。
6. 方便。
一個例子:部署套用的時候,以前的做法是找出一個項目中修改過的檔案,更新到伺服器上去,可以在伺服器上執行 svn export 命令,把代碼庫中的最新版本導出,完成部署(也可以替換回老版本)。
7. 速度與穩定性看起來都不錯。
學習它的管理、它的工作方式,是值得的。而 VSS是一個已經被逐漸拋棄的軟體。如果時間不是多得沒處用,那么就把時間花在最值得花的東西上面。

缺點

1、伺服器壓力太大,資料庫容量暴增。
2、如果不能連線到伺服器上,基本上不可以工作,看上面第二步,如果伺服器不能連線上,就不能提交,還原,對比等等。
3、不適合開源開發(開發人數非常非常多,但是Google app engine就是用svn的)。但是一般集中式管理的有非常明確的許可權管理機制(例如分支訪問限制),可以實現分層管理,從而很好的解決開發人數眾多的問題。

優點

1、管理方便,邏輯明確,符合一般人思維習慣。
2、易於管理,集中式伺服器更能保證安全性。
3、代碼一致性非常高。
4、適合開發人數不多的項目開發。
5、大部分軟體配置管理的大學教材都是使用svn和vss

安全性

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.
目前Apache Subversion的主席為Greg Stein, 項目領導者Release manager為Wandisco公司。
2017年8月10日,TortoiseSVN 1.9.7正式發布

遠程改密

由於SVN沒有自己的遠程管理工具,只能上伺服器上用命令行操作,故操作起來比較複雜。為此,svn俱樂部開發出svn管家對svn進行遠程管理,svn管家推出了windows版本和linux版本,部署很方便,不用安裝額外的環境如mysql、PHP或JAVA。svn管家不僅可以方便的遠程修改用戶密碼,更可以對svn進行遠程管理,極大地方便了SVN的用戶。

其他

啟動這個項目,CollabNet提供了啟動資金(它付出幾位全職 Subversion 開發人員的薪水), 但這是個開源項目, 由一組鬆散透明的規則所約定,2010年1月,正式成為Apache軟體基金會的一個頂級項目,並遵守Apache license,目前Wandisco是貢獻最多的全職Subversion開發者並擔任release manager.

相關詞條

熱門詞條

聯絡我們