2008-08-04 121 views
54

我的公司正在使用CVS作爲我們事實上的源代碼控制標準。不過,我聽到很多人說SVN比較好。使用SVN比CVS有什麼優勢?

我知道SVN是更新的,但除此之外,我不熟悉它的好處。

我在尋找的是這兩個系統的一個很好的,簡潔的比較,指出了Java/Eclipse開發環境中每個系統的優缺點。

回答

52

CVS只跟蹤逐個文件的修改,而SVN跟蹤整個提交作爲新版本,這意味着更容易跟蹤項目的歷史。添加所有現代源代碼控制軟件都使用修訂概念的事實,因此從SVN遷移要比從CVS遷移要容易得多。

還有原子提交問題。雖然我只遇到過一次,但可能會有兩個人在CVS中一起犯下相互衝突,丟失一些數據並使您的客戶處於不一致的狀態。當發現時間較早時,這些問題並不重要,因爲您的數據仍然存在於某處,但在壓力較大的環境中可能會很痛苦。

最後,圍繞CVS開發的工具並不多。雖然像Git或Mercurial這樣新的有創意的工具肯定缺乏工具,但SVN在任何系統上都有相當大的應用程序基礎。

編輯2015:說真的,這個答案現在是7歲。忘記SVN,像其他人一樣使用Git!

+1

我想要git vs subversion和git vs mercurial的相同答案 – 2017-01-15 20:12:06

18

在衆多比較:

http://wiki.scummvm.org/index.php/CVS_vs_SVN

現在,這是非常具體到該項目,但很多一般的東西apllies的。

臨顛覆:

  • 支持版本的重命名/移動(不可能CVS):芬國昐,安德
  • 支持目錄本身:這是可能的,除去他們,他們是版本:芬國昐, Ender
  • 文件屬性是版本化的;沒有更多的「可執行位」地獄:芬國昐
  • 總體版本號使構建版本測試和迴歸測試要容易得多:安德,芬國昐
  • 原子提交:芬國昐
  • 直觀(基於目錄的)分支和標籤:芬國昐
  • 更容易鉤子腳本(前/後提交等):SumthinWicked(我用它的Doxygen提交後)
  • 防止意外的衝突的文件提交:鹹馬,芬國昐
  • 支持自定義「差異」命令:芬國昐
  • 離線的diff,而且他們瞬間:SEV
+1

什麼是「fingolfin」?谷歌搜索使得它更容易混淆 – DuKes0mE 2015-05-15 12:57:39

+1

Fingolfin和Ender只是該論壇的人物名稱:「每個參數背後都有一份同意這個特定論證是有效的人的名單。 ` – hinneLinks 2015-07-06 07:02:12

7

Subversion的書中有an appendix,詳細介紹從CVS重要的區別,這可以幫助你做決定。這兩種方法或多或少都是一樣的想法,但是SVN專門用於解決CVS中長期存在的缺陷,所以從理論上講,SVN將永遠是更好的選擇。

14

SVN擁有CVS 3個主要優點

  • 它的速度更快
  • 支持的二進制文件
  • 版本,並增加了交易提交(全有或全無)
0

你應該看一看在Git而不是SVN。這是一個非常快速和非常強大的DVCS。它不像SVN那麼友好,但它在這方面有所改進,而且它不是難以學習的。

1

BTW:CVSNT支持原子提交

2

我第二次的Git Eridius'的建議,但我會擴大到其他DRCS(分佈式版本控制系統),如Mercurialbazaar

這些產品相當新近,與他們的工具和整合水平似乎低(根據我的初步研究)。我會說他們最適合那裏的權力開發者(和這裏;-))。

另一方面,什麼 CVS目前爲您做?從你最初的問題來看,你真的沒有任何問題,「CVS在這個問題上很糟糕,我可以用什麼來代替?」

您必須權衡任何潛在的遷移與收益的成本。對於現有的項目,我認爲這很難說明問題。

4

有一點不可忽視的是生態系統。我在一家CVSNT商店工作,默認情況下,我發現越來越多的開源工具支持SubVersion。

2

作爲一個在CVS和SVN之間切換的人(最初我們用cvs2svn切換了所有的項目,然後決定在新項目中只使用svn),下面是一些問題,我們有過。

  • 合流分支有很大的不同,如果你分支機構和頻繁合併,除非你有SVN 1.5的服務器上運行要知道,當你支(這是不是在烏龜SVN對話框很清楚)。邁克爾說分支和合並是直觀的,我認爲在使用CVS 10年後,事實並非如此。
  • 如果您在Linux上運行SVN服務器,則可能很難讓您的SA轉移到svn 1.5,因爲默認安裝1.4.x.
  • 在TortoiseSVN中合併衝突並不像TortoiseCVS那樣容易或者不明顯(至少對我和我的同事來說)。三窗格方法需要一些習慣和WinMerge(我的首選合併工具)不做三窗格合併。
  • 請注意:我讀過的很多在線教程和雜誌文章顯然不支持併合並,您應該將主要存儲庫設置爲https://svn.yoursvnserver.com/repos/YourProject/Trunk,並將分支設置爲https://svn.yoursvnserver.com/repos/YourProject/Branches/BranchX。如果您在錯誤的地方開始回購,可以清理乾淨,但會導致混淆。
0

您可能還會選擇將最新的代碼從CVS遷移到SVN並凍結您當前的CVS回購。這將使遷移變得更加容易,並且您還可以在舊的CVS回購中構建舊版本。

0

好吧,我覺得有些東西讓svn真棒。

  1. 的SVN-Altassian坩堝組合是審查和質量檢查的衝突
  2. 更好地管理的遠遠優於方法和合並
  3. 這顯然更快採取檢出,進行提交,等
  4. 的原子提交問題 - 有可能CVS中的兩個人一起犯下相互衝突,丟失一些數據並將您的代碼庫置於不一致狀態

Migra使用cvs2svn可以在幾個小時內輕鬆完成。

相關問題