版本控制系統(RCS)的選擇與比較

爲啥考慮選擇一個版本控制系統呢?由來已久。其實說到版本控制系統,工作的時候順從公司的安排,一直用的是 VSS ,家裏面以前常常使用 VS ,順面也用上了 VSS ,但是到了後來, VSS 明顯不行了,當做 Linux 的工程, Python 工程,或者 Eclipse 中的工程時, VSS 都不太勝任工作,早就想換一個到處能使的版本控制系統了。另外,工作以外其實陸陸續續寫了很多代碼,在博客上發佈的時候常常是用複製粘貼這樣的方式,以前也曾經將一些重要的工程打包,放到 google groups 上去,但是實在是太過麻煩,要方便的話,還是在網站找個項目託管,將所有的代碼直接提交,供大家去取的方式最好,順面將自己的工作之外的代碼編寫方式統一,也更好組織工程的目錄結構。在重裝電腦的時候也省事,不用將 N 大的東西考來考去還怕丟失。在自己家的服務器,臺式機,筆記本 3 者間倒騰代碼也更加方便。

       談談目前流行的 RCS 的選擇,基本上現在還在用的版本控制系統分爲 3 種,一種以 VSS(Visual Source Safe) 爲代表,在局域網內使用,第二種以 CVS( Concurrent Versions System ) SVN(Subversion) 爲代表在互聯網上使用,第三種以 Mercurial,Git 爲代表,以分佈式方式使用,(對應的, CVS,SVN 的使用方式將所有的內容都集中在一臺服務器上,被稱作集中式)可以在互聯網上使用,但是本機也有代碼倉庫,可以本地提交代碼。基本上,將這三種依次的分爲 3 代也未嘗不可。

       Wiki 上有個網頁很詳細的列出了衆多流行的 RCS 極其功能比較,《 Comparison of revision control software 》,建議所有在衆多的 RCS 軟件中看的眼花繚亂的人去看看(也許看過後更加亂了)。總而言之我得出的結論是 Mercurial > SVN > CVS > VSS

       談談選擇,選擇的目的就是在廣泛的方位內使用版本控制系統,拋棄 VSS 本來就是選擇的目的,這裏就不多說了。

       CVS 實在算是老牌的版本控制系統了,當年整個開源世界都是靠 CVS 過來的。但是 SVN CVS 開發者特意針對 SVN 缺點開發的產品,出來以後,整個開源世界都換了顏色。。。。典型的就是 Source Forge ,這個最大的開源站點都換了 SVN 後,還有什麼理由使用 CVS 呢? Google Project Host 出來的較晚,一開始就是使用 SVN 。另外, SVN CVS 強大的地方除了上面的 WIKI 文章,還可以參考本文最後的中文補充材料。 SVN 替代 CVS 的趨勢是不可逆轉的,拋棄 CVS

       現在就剩下 SVN,Mercurial,Git 了,其實 SVN 已經足夠強大了,這點毋庸置疑,但是爲什麼我們還需要分佈式呢?( Mercurial,Git 的代碼管理方式)個人工作時的經歷,使我決定使用最新的特性。 SVN 的代碼提交必須首先要能聯網,這也是開源時,不同的開發者在不懂的地方決定的,分佈式的好處就是本地也有代碼倉庫,這樣即使沒有聯網也可以本地提交代碼,然後等待聯網時再去 Merge , 當然,這是簡單的說明,最大的好處在於,本地也能有一套完整的版本控制系統,在代碼沒有提交到正式的代碼倉庫前享受版本控制的好處,這點的好處非常多。舉 兩個最常見的例子,其一就是一個代碼量適中的工作,你沒有分出版本,工作到一半的時候,很顯然不能提交到正式的庫裏,影響大家的工作,那麼中途你想嘗試改 改代碼,有個本地庫,能讓你更加的自由,其二就是工作已經完成後,但是還沒有來得及測試,中途需要去完成一個更加重要的工作,此時代碼提交到正式庫中還是 不恰當的,假如有個本地的庫的話,能夠先提交,然後無論過了多久後,你再回來,你都能可靠地獲取到完整的代碼,以前工作的時候在 VSS 我就碰到過這樣的情況,然後 1 2 天的工作就在一個自以爲安全的全取上丟失了。因爲上面痛苦的經歷,我決定嘗試使用最新的分佈式版本控制系統,雖然我已經在自己的服務器上好不容易搭建了一套 SVN 服務了,雖然自己的開發機上都已經裝好了 TortoiseSVN 了,雖然分佈式的版本控制系統還太新,以至於還不太完善。呵呵,作爲程序員,就要敢於擁抱新事物嘛。。。。。。。。又想起某句名言, IT 領域最大的特點就是喜新厭舊。。。。。。

       最後剩下的就是 Mercurial Git 之爭了,在這兩個 RCS 中選擇還真是痛苦的選擇,因爲各有優勢,就像當年選擇一個除 MFC 以外的 GUI 庫一樣, Qt GTK 的選擇一樣痛苦。(當年最後的選擇是 Qt )這裏,有幾篇不錯的中文文章《 擁抱 Mercurial---選擇分佈式版本控制工具 》,《 分佈式版本控制工具: git & mercurial 》,《 幾個分佈式 vcs比較 ( 文中的 HG 就是指 Mercurial) 對其進行了比較,具體的比較內容這裏結合 WIKI 中的文章總結下:

GIT:

1.   SVN 的集成更好。
2.   GIT
是基於內容的跟蹤系統,相較 Mecurial 而言,模型簡單些,因此容易擴展;

3.   Linux rails 世界中應用相當廣泛。( GIT 本身就是 Linus 開發的,這點是自然的,當年 CSDN C C++ 世界最大的口水戰不就是因爲 GIT 全部是用 C 開發,然後某個 Windows 下的 C++ 開發者提出了疑問後觸發的嗎。。。。。。)

4.   跨平臺特性較弱。(可以理解)

5.   命令複雜。。。。。(對應的也許是功能更加強大吧)

6.   branch 建立合併功能強大,方便。

 

Mercurial

1. SVN 命令相似,學習代價更小。

2. 跨平臺特性很好。

3. 使用廣泛,文檔很好。

 

以下是各自獲得的支持列表:

Software  

Web interfaces  

Stand-alone GUIs   

Integration and/or Plug-ins for IDEs   

Git

gitweb, wit, cgit, GitHub , gitorious , Trac

gitk, git-gui ( Tcl / Tk ), tig, TortoiseGit , qgit, gitg (GNOME/GTK), (h)gct (Qt), git-cola (Qt), Git Extensions (Windows Explorer)

Eclipse ( JGit/EGit ); Netbeans ( NbGit ); Visual Studio ( Git Extensions ); Emacs ( extension for standard VC); TextMate ( Git TextMate Bundle ); Vim (VCSCommand plugin); IntelliJ IDEA >8.1 ( standard feature ); Komodo IDE ; Anjuta

Mercurial

included [63] , Bitbucket , Trac

Hgk (Tcl/Tk), (h)gct (Qt), TortoiseHg (Windows Explorer, Nautilus)

Eclipse ( Mercurial Eclipse ), NetBeans ( [50] ), Visual Studio 2008 ( [51] ), Emacs, Vim (VCSCommand plugin), Komodo IDE

比較明顯的是, Git 獲得的 Linux 下的支持那是非常多啊。。。。。。

最後,看的越多,越難選擇,兩者都是非常優秀的軟件,相對來說, Git 更加強大,但是因爲自己還是需要在 Windows 下做一些工作的,另外,因爲想在網上找個地方託管代碼, Google 支持 Mercurial 而不支持 Git ,因爲這個緣故,選擇 Mercurial 了。。。。。呵呵,最後的選擇因爲這麼簡單的原因。。。。。。。

       另外,對於 E 文不太好的人,提供一篇中文補充材料:

版本控制系統簡介 RCS/CVS/Subversion 》向我們講述了 CVS 的特性, SVN CVS 強大的地方 ,以及一些 SVN 的缺點。

http://blog.csdn.net/vagrxie/archive/2009/09/23/4582457.aspx

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