所有的文檔都顯示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。下面你可以找到兩者的相對優勢、劣勢。我們假設余下的東西兩者沒有什么大差別。如果你對兩者都舉棋不定,我們建議試試兩個系統,注意觀察下面幾個指標。你也可以到網上看看兩者之間的討論。(https://www.cnblogs.com/legou/articles/1871503.html)
一、主要功能比較
- (1)目錄版本控制
CVS 只能跟蹤單個文件的歷史, 不過 Subversion 實作了一個 "虛擬" 的版本控管文件系統, 能夠依時間跟蹤整個目錄的變動。 目錄和文件都能進行版本控制。
- (2)真實的版本歷史
自從CVS限制了文件的版本記錄,CVS並不支持那些可能發生在文件上,但會影響所在目錄內容的操作,如同復制和重命名。除此之外,在CVS里你不能用擁有同樣名字但是沒有繼承老版本歷史或者根本沒有關系的文件替換一個已經納入系統的文件。在Subversion中,你可以增加(add)、刪除(delete)、復制(copy)和重命名(rename),無論是文件還是目錄。所有的新加的文件都從一個新的、干凈的版本開始。
- (3)自動提交
一個提交動作,不是全部更新到了檔案庫中,就是不完全更新。這允許開發人員以邏輯區間建立並提交變動,以防止當部分提交成功時出現的問題。
- (4)納入版本控管的元數據
每一個文件與目錄都附有一組屬性關鍵字並和屬性值相關聯。你可以創建, 並儲存任何你想要的Key/Value對。 屬性是隨着時間來作版本控管的,就像文件內容一樣。
- (5)選擇不同的網絡層
Subversion 有抽象的檔案庫存取概念, 可以讓人很容易地實作新的網絡機制。 Subversion 可以作為一個擴展模塊嵌入到Apache HTTP 服務器中。這個為Subversion提供了非常先進的穩定性和協同工作能力,除此之外還提供了許多重要功能: 舉例來說, 有身份認證, 授權, 在線壓縮, 以及文件庫瀏覽等等。還有一個輕量級的獨立Subversion服務器, 使用的是自定義的通信協議, 可以很容易地通過 ssh 以 tunnel 方式使用。
- (6)一致的數據處理方式
Subversion 使用二進制差異算法來異表示文件的差異, 它對文字(人類可理解的)與二進制文件(人類無法理解的) 兩類的文件都一視同仁。 這兩類的文件都同樣地以壓縮形式儲存在檔案庫中, 而且文件差異是以兩個方向在網絡上傳輸的。
- (7)有效的分支(branch)與標簽(tag)
在分支與標簽上的消耗並不必一定要與項目大小成正比。 Subversion 建立分支與標簽的方法, 就只是復制該項目, 使用的方法就類似於硬連接(hard-link)。 所以這些操作只會花費很小, 而且是固定的時間。
- (8)Hackability
Subversion沒有任何的歷史包袱; 它主要是一群共用的 C 程序庫, 具有定義完善的API。這使得 Subversion 便於維護, 並且可被其它應用程序與程序語言使用
二、兩者的相同與不同之處
- 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是捆綁在一起的
三、svn優於cvs之處
- 1、原子提交。一次提交不管是單個還是多個文件,都是作為一個整體提交的。在這當中發生的意外例如傳輸中斷,不會引起數據庫的不完整和數據損壞。
- 2、重命名、復制、刪除文件等動作都保存在版本歷史記錄當中。
- 3、對於二進制文件,使用了節省空間的保存方法。(簡單的理解,就是只保存和上一版本不同之處)
- 4、目錄也有版本歷史。整個目錄樹可以被移動或者復制,操作很簡單,而且能夠保留全部版本記錄。
- 5、分支的開銷非常小。
6、優化過的數據庫訪問,使得一些操作不必訪問數據庫就可以做到。這樣減少了很多不必要的和數據庫主機之間的網絡流量。
