雖然我使用傳統SCM(軟體組態管理,或者叫RCS——版本控制系統)軟體已經有很多年,從那個垃圾一般的VSS到功能強大的CVS和SVN都用過 一段時間,短則半年(VSS),長則數年(SVN)。但是對於分布式版本控制系統(DRCS),我也是剛接觸不久,發現它們的確很不錯,相比傳統SCM來 說,是一種質的變化。
所謂DRCS是相對於傳統集中式的SCM而言的。對於傳統SCM來說,Repository是集中在唯一的一個地方, 所有的使用者進行commit或update以及其它的相關操作基本上都需要能夠直接連接到這個Repository才能進行。這就會存在一些比較麻煩的問 題,就我個人的體會來說,常見的麻煩事在於(以下僅以CVS和SVN為例,至於VSS——不能為rubbish浪費時間):
1、並不是所有的開發人員都總能串連到Repository伺服器,比如在沒有網路連接或是網路連接受限的情況——當然SVN提供的HTTP訪問方式部分解決了這種困難,但仍然不夠。
2、在團隊協作開發中,當變更衝突增加以後,處理起來會比較麻煩。
3、分支管理方面的功能還較弱。
4、安全性問題。不論是用獨立伺服器方式還是HTTP方式,使用者認證方式都相對簡單,當然也可以配置得更安全,但比較麻煩。
5、最後一個小問題就是:不論是CVS還是SVN,都會在工作目錄的每個子目錄裡建立一個隱藏目錄記錄本地狀態資訊,比較煩人。
而DRCS的目標就是儘可能解決傳統SCM存在的不足之處——包括但不限於我上面所說的那些。就我目前試用過的兩個DRCS——Bazaar和Mercurial——來說,上面的問題都解決得比較好:
1、都可以在本地提供全部的版本控制功能,可以只在必要的時候合并更新到公用Repository中。
2、因為是針對分布式開發設計,變更合并功能強大。
3、分支管理功能同樣強大。
4、Bazaar支援SFTP方式的push,而Mercurial支援SSH方式的push,二者都是基於安全的通訊協議並且使用系統的使用者管理機制,在保證安全性的同時保持了使用上的簡單性。
5、只在工作目錄的頂層產生一個隱藏目錄——就是本地Repository,保持了工作目錄的清爽。
顯然,DRCS天生是為了開源項目而量身定製的——因為開源項目的開發人員往往都是在地理上極度分散的,但又需要對源碼進行有效版本管理。但是對於其它的軟體項目來說,DRCS也同樣是個好東西,特別是其變更合并功能和分支管理功能。
後面我會簡單介紹一下我最近試用過的兩款比較流行的DRCS——Bazaar和Mercurial。
其實這兩款DRCS在命令定義方面都是繼承傳統的,所以學習起來並沒有太大的複雜性,並且具有很多的共性——二者除了程式名不一樣以外,常用的命令和參數定義都幾乎是完全一樣的,甚至一些設定檔都是類似的。
(未完待續)