我接觸過SVN,CVS,Clearcase和Git,真正做項(xiàng)目用過的有CVS,ClearCase和Git,在這里簡單寫下我自己對這三個(gè)版本工具的使用感受。
SVN,CVS,Git為開源免費(fèi)工具,ClearCase為IBM所有 。
SVN,CVS,ClearCase為集中管理,Git為分布式管理。
ClearCase只有大公司使用,小公司一般會使用SVN,CVS,Git。
Git是分布式的版本控制系統(tǒng),其設(shè)計(jì)初衷是為了自由,每個(gè)開發(fā)者不必依賴central的中心服務(wù)器,在不聯(lián)網(wǎng)的local環(huán)境仍可以干活。Git是現(xiàn)在應(yīng)用最為廣泛的版本管理工具,尤其在GitHub推廣流行下。在對代碼的一致性的實(shí)時(shí)要求不高的環(huán)境中使用還可以,但對大規(guī)模的開發(fā)團(tuán)隊(duì),代碼一致性的實(shí)時(shí)要求高的情況,使用git效率并不高。特別是如果存在一個(gè)central的quality gate,對每個(gè)人提交的修改進(jìn)行驗(yàn)證,質(zhì)量合格才進(jìn)行merge,那么會造成排隊(duì)的人過多,長時(shí)間不能順利提交修改的代碼,而造成開發(fā)效率很低。
CVS使用簡單,是中央管理的版本工具,其代碼是統(tǒng)一管理。如果連不上服務(wù)器就干不了活。常用場景是每個(gè)開發(fā)人員每天早上update下自己的工作區(qū),晚上下班前在做完本地檢查沒問題后checkin自己的所有本地修改。如果同一文件已有人更改過了,則自己要先update到最新,在本地做完merge后再check in,否則checkin 失敗。 所以大家一有修改就及時(shí)checkin,要不然就有可能需要自己在本地痛苦的做merge。
由于大家都是在latest下做事情,別人的更改會立馬作用到自己的工作區(qū),如果其他人的更改有問題,就會影響到自己的工作,所以小團(tuán)隊(duì)用CVS可能忍受,如果大團(tuán)隊(duì)的話,由于相互影響很大,很難有很高的開發(fā)效率。 當(dāng)然VCS也可以回滾到老版本,但使用起來特別不方便。
據(jù)說CVS也有branch和tag可功能,可是為什么我就從來沒用過呢?這個(gè)應(yīng)該是公司的管理策略有關(guān)吧?四五十人的團(tuán)隊(duì)分布在不同的block上,沖突概率相對較小,也就簡單著用了。新項(xiàng)目就直接建個(gè)新repository,copy原來的代碼放進(jìn)去,基于此開始新的開發(fā)工作,確實(shí)簡單粗暴。
另外,CVS太古老了,大家基本都放棄使用了。
ClearCase的缺點(diǎn)顯而易見,中央管理造成只能在線工作,管理復(fù)雜,以及成本高等等,造成只有少數(shù)大公司能用的起。但優(yōu)點(diǎn)是不同的vob自由組合成新的project vob,方便項(xiàng)目的繼承管理。另外方便的lable管理和每個(gè)用戶自定義的Configure Spec結(jié)合來,可以自由的切換可見版本和自由回滾。大家可以在統(tǒng)一的baseline下做事,在合適周期下整體向前推進(jìn)。
大團(tuán)隊(duì)使用clearcase悠然自得,每個(gè)模塊在不同階段對外release一個(gè)label,或其他team使用。自己內(nèi)部可以繼續(xù)開發(fā)工作,而不為外部使用,將改動造成的影響限制在局部范圍內(nèi),只有下一階段代碼成熟后,再對外發(fā)布新的label。
設(shè)置CS是使用ClearCase過程中最常做的事情,一般會將其他模塊release的label放進(jìn)去,而自己做開發(fā)的部分放到latest可見。整個(gè)project的release也是以CS的形式進(jìn)行分發(fā)。
———————————————————
深入理解可參考 版本管理三國志 (CVS, Subversion, git)