Apache Subversion 通常被縮寫成 SVN,是一個開放源代碼的版本控制系統(tǒng),Subversion 在 2000 年由 CollabNet Inc 開發(fā),現(xiàn)在發(fā)展成為 Apache 軟件基金會的一個項目,同樣是一個豐富的開發(fā)者和用戶社區(qū)的一部分。這個教程給你提供一個理解 SVN 系統(tǒng),操作當(dāng)前和歷史版本的文件,比如代碼、網(wǎng)頁、文檔。
SVN是Subversion的簡稱,是一個開放源代碼的版本控制系統(tǒng),相較于RCS、CVS,它采用了分支管理系統(tǒng),它的設(shè)計目標(biāo)就是取代CVS。互聯(lián)網(wǎng)上很多版本控制服務(wù)已從CVS遷移到Subversion。說得簡單一點SVN就是用于多個人共同開發(fā)同一個項目,共用資源的目的。
1 存儲類型格式
CVS是個基于RCS文件的版本控制系統(tǒng)。每個CVS文件都不過是普通的文件,加上一些額外信息。這些文件會簡單的重復(fù)本地文件的樹結(jié)構(gòu)。因此,不必?fù)?dān)心有什么數(shù)據(jù)損失,如果必要的話可以手工修改RCS文件。
SVN是基于關(guān)系數(shù)據(jù)庫的(BerkleyDB)或一系列二進(jìn)制文件的(FS_FS)。一方面這解決了許多問題 (例如,并行讀寫共享文件)以及添加了許多新功能(例如運行時的事務(wù)特性。)。然而另一方面,數(shù)據(jù)存儲由此變得不透明。
2 速度
CVS比較慢。
整體而言,由于架構(gòu)實現(xiàn)的不同, SVN的確比CVS快很多。在網(wǎng)絡(luò)上它只傳輸很少的信息并支持更多的離線模式的功能。但這也是有代價的。速度的代價就是巨大的存儲(完全備份所有的工作文件)。
3 、標(biāo)志&分支
SVN采用標(biāo)志和分支而拋棄了其他三件東西,實際上這意味著他們把這個概念替換為在檔案庫內(nèi)部復(fù)制文件或目錄以便保存日志。這樣一來,無論標(biāo)志創(chuàng)建還是分支創(chuàng)建都只是倉庫內(nèi)部的文件復(fù)制了。對分支而言:分支不過是在倉庫內(nèi)部的一個單獨的目錄而已了,不像早期還有些什么交錯。對標(biāo)志而言:已經(jīng)不能對代碼加標(biāo)志了。在某種程度上說,SVN全文件編號補足了這個缺陷,SVN里整個倉庫都有版本號,但不是針對單個文件。
4、元數(shù)據(jù)
CVS只允許存儲文件。
SVN允許一個文件有任意多的可命名屬性,功能十分完全。
5、文件類型
CVS最初是為文本文件存儲而設(shè)計的。因此其他文件類型(二進(jìn)制,統(tǒng)一碼)文件的支持幾乎沒有,如需要的話則要有其他信息,并且客戶端服務(wù)器端都要調(diào)整。
SVN會關(guān)心所有的文件類型,不需要你來手工操作。
6、回滾
CVS允許任意的回滾,在任意一個已遞交的版本上,盡管這要花些時間(所有的文件都要分別處理)。
SVN不允許遞交后回滾。建議把版本庫里好的狀態(tài)版本加到末尾,覆蓋掉損壞的版本。而損壞的版本無論如何也是會存在數(shù)據(jù)庫里的。(SVN的滾回操作實際上是merge操作)
7、事務(wù)
CVS中的“零或一”事務(wù)原則根本沒有實現(xiàn)。如果檢入幾個文件的話(加到服務(wù)器上),很有可能部分文件完成了,而另幾個沒有。作為一個潛規(guī)則,手工糾正這些并且對余下的文件 (而不是所有文件)一一重復(fù)檢入。這樣這些文件將在兩階段中被檢入。SVN的確支持“零或一”事務(wù)原則,這是SVN的一大優(yōu)勢。
本教程是讓對有版本控制需求且對 SVN 感興趣的軟件開發(fā)人員學(xué)習(xí) SVN 的基本知識,通過本教程你可以一步一步了解 SVN 的使用。
SVN 官網(wǎng):https://subversion.apache.org/
Github SVN 源碼:https://github.com/apache/subversion
java教程:http://hgci.cn/java/