SVN與CVS比較

SVN與CVS比較 

所有的文檔都顯示SVN可以取代CVS,同時SVN的問題和缺點都被隱藏了。不幸的是,我們並不認爲SVN是CVS的替代品,儘管很多缺陷都被修改了。更有甚者,它甚至讓人重回VSS。CVS和SVN的比較類似與比較C++和Java。很明顯CVS和SVN都遠比SourceSafe強大的多,如同C++和Java比Basic強大的多。CVS代表了幾乎代碼控制系統的所有功能項,儘管有時他的實現並不很方便。SVN,修正並添加了一些CVS並不擁有功能。例如,創建標誌和分支dubious,你在編輯文件是其他人不會有任何通知。這有點象Java的發明者:他們認爲你不需要指針他們就在Java裏面取消了指針, Java裏也沒有操作符重載。 
SVN並不是CVS的替代品。他只是個不同的系統,類似於CVS。它有些特有的功能,足以作爲採用它的理由。這些功能使他更適合於開發環境,例如對 PowerBuilder。下面你可以找到兩者的相對優勢、劣勢。我們假設餘下的東西兩者沒有什麼大差別。如果你對兩者都舉棋不定,我們建議試試兩個系統,注意觀察下面幾個指標。你也可以到網上看看兩者之間的討論。 
注意:這份評價表並不代表最終意見,兩個系統仍然在開發之中。最後一次更新是在2005年七月(CVS NT 2.5.01和SVN 1.2)。 


編號 對比項 
CVS Vs SVN 
=========================== 
1 存儲類型格式 
CVS是個基於RCS文件的版本控制系統。每個CVS文件都不過是普通的文件,加上一些額外信息。這些文件會簡單的重複本地文件的樹結構。因此,不必擔心有什麼數據損失,如果必要的話你可以手工修改RCS文件。 
------------------------------ 
SVN是基於關係數據庫的(BerkleyDB)或一系列二進制文件的(FS_FS)。一方面這解決了許多問題 (例如,並行讀寫共享文件)以及添加了許多新功能(例如運行時的事務特性。)。然而另一方面,數據存儲由此變得不透明,或是說並不那麼用戶友好了。那就是爲什麼工具軟件,對倉庫 (數據庫)變得那麼重要了。 
=========================== 
2 速度 
CVS比較慢。 
------------------------------ 
整體而言,由於架構實現的不同, SVN的確比CVS快很多。在網絡上它只傳輸很少的信息並支持更多的離線模式的功能。但這也是有代價的。速度的代價就是巨大的存儲(完全備份所有的工作文件)。 
=========================== 
3 標誌&分支 (!!!重要) 
在我們看來,這些實現是適宜的。 
------------------------------ 
SVN開發員自認爲把採用標誌和分支而拋棄了其他三件東西是件了不起的事。實際上這意味着他們把這個概念替換爲在檔案庫內部複製文件或目錄以便保存日誌。這樣一來,無論標誌創建還是分支創建都只是倉庫內部的文件複製了。在SVN的開發員看來,這是個很優雅的決策,這讓生活變得如此簡便。而我們看來,這絲毫沒有什麼值得驕傲之處。對分支而言,事情還不怎麼糟糕,現在分支不過是在倉庫內部的一個單獨的目錄而已了,不象早期還有些什麼交錯。對標誌而言,事情就不那麼妙了。你已經不能對代碼加標誌了,這個功能就這麼沒了。在某種程度上說,SVN全文件編號補足了這個缺陷, SVN裏整個倉庫都有版本號,但不是針對單個文件。當然,如果你認爲一個符號標誌比一個四位編碼有效的話,我們業無話可說。 
=========================== 
4 元數據 
CVS只允許存儲文件。 
------------------------------ 
SVN允許一個文件有任意都的可命名屬性。功能十分完全,但不知到有什麼用。 
=========================== 
5 文件類型 
CVS最初是爲文本文件存儲而設計的。因此其他文件類型(二進制,統一碼)文件的支持幾乎沒有,如需要的話則要有其他信息,並且客戶端服務器端都要調整。 
------------------------------ 
SVN會關心所有的文件類型,不需要你來手工操作。 
=========================== 
6 滾回 
CVS允許任意的滾回,在任意一個已遞交的版本上,儘管着要花些時間(所有的文件都要分別處理)。 
------------------------------ 
SVN不允許遞交後滾回。我們建議把倉庫裏好的狀態版本加到末尾,覆蓋掉損壞的版本。而損壞的版本無論如何也是會存在數據庫裏的。(svn的滾回操作實際上是merge操作) 
=========================== 
7 事務 
CVS中的“零或一”事務原則根本沒有實現。如果檢入幾個文件的話(加到服務器上),很有可能部分文件完成了,而另幾個沒有。做爲一個潛規則,手工糾正這些並且對餘下的文件 (而不是所有文件)一一重複檢入。這樣這些文件將在兩階段中被檢入。但至今爲止,因爲這個功能缺少而導致的數據倉庫損壞的案例還沒有出現過。 
------------------------------ 
SVN的確支持“零或一”事務原則,這是SVN的一大優勢。 
=========================== 
8 可用性 
CVS可以用在你需要的地方,支持完善。 
------------------------------ 
SVN並未廣泛運用,一些支持項目仍然沒有實現。 
=========================== 
9 內在架構與代碼 
CVS是個古老的系統。起初CVS只是一些運用RCS的腳本文件。後來這些腳本被組成一個單個應用程序,但內部結構仍然有待改進。直到今天,仍有人企圖從頭開始,重寫一遍CVS,但都不成功。我們曾經嘗試國重寫客戶端代碼以期更好的集成效果,但是,不成功。現在我們都不認爲CVS在功能上能走到多遠了。 
------------------------------ 
Subversion的開發員的確花了許多時間在內部架構上。我們仍然不知道這些決策有多大的正確性等等。但有一點可以肯定,代碼有良好的可擴展性,增強工作也在進行着。 
=========================== 
總體評價 
CVS 4 
SVN 5

相同與不同:

1 對重命名、刪除文件的支持  
 cvs:不支持本地文件重命名提交        
   刪除分remove和erase兩種前者把本地和庫中文件都刪除 後者只是刪除本地文件         
  不能刪除文件夾 
 svn:支持文件重命名提交系統會提示刪除舊文件,創建新文件         
 刪除本地文件提交 庫中文件也被刪除
2 對中文路徑名的支持  
cvs:支持的比較好 
svn:要將權限控制文件保存爲svn支持的UTF-8格式3 本地文件與庫的對應關係 
 cvs:可以多對多  
svn:一個庫可以有多個工作目錄但一個工作目錄只能對應一個庫 雖然可以更改庫位置但是要求很嚴格4 庫中文件存放方式 
 cvs:完全用戶可見方式與客戶端文件夾結構完全一致(cvs生成文件除外) 
 svn:與vss相似,看不到文件真正的內容5 用戶、權限管理 
 cvs:管理員很難清楚的知道一個項目到底有多少個用戶各用戶的權限和密碼是什麼 只能用分組的方式管理用戶而且密碼和權限還是不清晰  
svn:查看、修改配置文件即可6 權限 
 cvs:有read、write、creat、none這四種權限,任何人不能刪除文件夾(admin也只能跑到服務器上把相應文件夾殘忍刪除?我暫時只知道這個方法……汗-_-‖)  
svn:只有read、write、none三種權限 creat和delete權限好象和write是捆綁在一起的 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章