二、SVN與CVS優(yōu)缺點
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,速度
整體而言,由于架構(gòu)實現(xiàn)的不同, SVN的確比CVS快很多,在網(wǎng)絡(luò)上它只傳輸很少的信息并支持更多的離線模式的功能。速度的代價是巨大的存儲(完全備份所有的工作文件)。
3,標(biāo)志&分支
SVN采用標(biāo)志和分支,在檔案庫內(nèi)部復(fù)制文件或目錄以便保存日志。SVN里整個倉庫都有版本號,但不是針對單個文件。
4, 元數(shù)據(jù)
CVS只允許存儲文件。SVN允許一個文件有任意多的可命名屬性,功能十分完全。
5,文件類型
CVS是為文本文件存儲而設(shè)計的。SVN支持所有的文件類型。
6,回滾
CVS允許任意的回滾,在任意一個已遞交的版本上,盡管這要花些時間(所有的文件都要分別處理)!
SVN不允許遞交后回滾。建議把版本庫里好的狀態(tài)版本加到末尾,覆蓋掉損壞的版本。而損壞的版本無論如何也是會存在數(shù)據(jù)庫里的。(SVN的滾回操作實際上是merge操作)
7,事務(wù)
CVS中的“零或一”事務(wù)原則根本沒有實現(xiàn)。如果檢入幾個文件的話(加到服務(wù)器上),很有可能部分文件完成了,而另幾個沒有。作為一個潛規(guī)則,手工糾正這些并且對余下的文件 (而不是所有文件)一一重復(fù)檢入。這樣這些文件將在兩階段中被檢入。SVN支持“零或一”事務(wù)原則,這是SVN的一大優(yōu)勢。
一、SVN(Subversion)概述
1,定義
SVN版本控制系統(tǒng)、代碼、文檔等管理工具,是cvs的接班人。Subversion 初的設(shè)計Team定下了幾個簡單的目標(biāo):它必須在功能上可取代 CVS,也是說, 所有 CVS 可做到的事, 它都要能夠作到。 在修正明顯的瑕疵的同時, 還要保留相同的開發(fā)模式。經(jīng)過十四個月的編碼后, Subversion 于2001年8月31日開始實現(xiàn) “自行管理”,即開發(fā)人員不再使用 CVS 來管理 Subversion 的代碼, 而以 Subversion 自己來管理。目前,絕大多數(shù)開源軟件都使用SVN作為代碼版本管理軟件。SVN = 版本控制 + 備份服務(wù)器。簡單的說,您可以把SVN當(dāng)成您的備份服務(wù)器,更好的是,他可以幫您記住每次上傳到這個服務(wù)器的檔案內(nèi)容,并且自動的賦予每次的變更一個版本。 通常我們稱用來存放上傳檔案的地方做Repository。用中文來說,有點像是檔案倉庫的意思,不過,通常我們還是使用Repository這個名詞;旧希谝淮挝覀冃枰幸粋新增(add)檔案的動作,將想要備份的檔案放到Repository上面。日后,當(dāng)您有任何修改時,都可以上傳到 Repository上面,上傳已經(jīng)存在且修改過的檔案叫做commit,也是提交修改給SVN server的意思。針對每次的commit,SVN server都會賦予他一個新的版本。同時,也會把每次上傳的時間記錄下來。日后,如果您需要從Repository下載曾經(jīng)提交的檔案。您可以直接選擇取得新的版本,也可以取得任何一個之前的版本。如果忘記了版本,還是可以靠記憶嘗試取得某個日期的版本。
2,版本模型
所有的版本控制系統(tǒng)都需要解決文件共享的問題 ,怎樣讓系統(tǒng)允許用戶共享信息,而不會讓他們因意外而互相干擾?傳統(tǒng)的版本控制系統(tǒng)使用鎖定-修改-解鎖模型,在這種模型里,在一個時間段里版本庫的一個文件只允許被一個人修改。首先在修改之前,要“鎖定”住這個文件,其他人不能對這個文件做任何修改,在結(jié)束編輯并且放開這個鎖之前,其他人只可以閱讀文件。編輯完解鎖后,其他人才可以鎖定并且開始編輯這個文件。SVN,CVS和一些版本控制系統(tǒng)使用拷貝-修改-合并模型,在這種模型里,每一個客戶聯(lián)系項目版本庫建立一個個人工作拷貝—版本庫中文件和目錄的本地映射。用戶并行工作,修改各自的工作拷貝,終,各個私有的拷貝合并在一起,成為終的版本,這種系統(tǒng)通?梢暂o助合并操作,但是終要靠人工去確定正誤。需要注意的是軟件不能自動的解決沖突,只有人可以理解并作出智能的選擇。如果修改沖突,可以看到一對沖突的修改集,并手工的選擇保留一組修改。
3,為什么要使用SVN
• SVN Repository可以是PC上一個目錄或隨身碟,也可以是公司的服務(wù)器。
• SVN有很棒的版本控管機制。所有上傳的版本都會幫您記錄下來,日后您可以隨時取得某一個時刻的版本,而且也有版本分支及合并等好用的功能。
• SVN可以讓不同的開發(fā)者存取同樣的檔案,并且利用SVN Server作為檔案同步的機制。也是說,您有檔案更新時,無須將檔案寄給您的開發(fā)成員。只需要告訴他新的版本已經(jīng)在SVN Server上面,請他自己去SVN Server上面可以取得新版本。而且,SVN Server也可以做到當(dāng)您上傳新版本后,自動發(fā)信給相關(guān)的成員。
• SVN的存放檔案方式是采用差異備份的方式。也是說,他只會備份有不同的地方。所以很省硬盤空間。此外,他也可以針對所謂的非文字文件進(jìn)行差異備份。
4,集中式版本管理系統(tǒng)
SVN是一個“集中式”的信息共享系統(tǒng)。版本庫是SVN的核心部分,是數(shù)據(jù)的中央倉庫。版本庫以典型的文件和目錄結(jié)構(gòu)形式文件系統(tǒng)樹來保存信息。任意數(shù)量的客戶端連接到SVN版本庫,讀取、修改這些文件?蛻舳送ㄟ^寫數(shù)據(jù)將信息分享給其他人,通過讀取數(shù)據(jù)獲取別人共享的信息。
集中式管理的工作流程如下圖: