工作多年,軟件源代碼版本管理的軟件也用過(guò)了這三種:Clearcase, SVN, Git.
許多公司使用Clearcase作為版本庫(kù)管理工具,一般在使用中都會(huì)建立開(kāi)發(fā)分支(用于個(gè)人開(kāi)發(fā))和集成分支(用于發(fā)布),Clearcase的優(yōu)點(diǎn)是管理體系嚴(yán)謹(jǐn),并且可以和Rational的其他工具比如ClearQuest集成,并且作為商業(yè)產(chǎn)品,有專(zhuān)門(mén)的團(tuán)隊(duì)提供技術(shù)支持和維護(hù),所以大公司使用起來(lái)的比較放心一點(diǎn)。然而,正是由于有其龐大的一套架構(gòu)體系和業(yè)務(wù)邏輯,所以往往需要專(zhuān)門(mén)的人員的進(jìn)行管理和配置,這對(duì)于講求速度的項(xiàng)目,對(duì)于經(jīng)費(fèi)和人手有限的團(tuán)隊(duì)而言,可能門(mén)檻就高了。
SVN是近年來(lái)流行的免費(fèi)的版本庫(kù)管理工具,功能可以說(shuō)是中規(guī)中矩,該有的功能都具有了。有的網(wǎng)友評(píng)論說(shuō),SVN之類(lèi)的免費(fèi)軟件,沒(méi)有Clearcase那樣的源代碼訪問(wèn)控制功能,所有人都可以完全訪問(wèn)整個(gè)代碼,即可以下載也可以隨意修改,所以不好云云。我看到這樣的評(píng)論不禁感到莞爾。事實(shí)并非如此,指望一個(gè)SCM軟件去再幫你做訪問(wèn)權(quán)限管理,實(shí)在是有點(diǎn)得隴望蜀的意思;何況這個(gè)也不符合我們一直強(qiáng)調(diào)的單一職責(zé)原理(SRP)。版本庫(kù)管理軟件的主要任務(wù)還是幫你維護(hù)好你的源代碼的各個(gè)版本,從而讓你能夠追溯,比較以及合并你團(tuán)隊(duì)之前的代碼和當(dāng)前的代碼,能夠高效無(wú)錯(cuò)的做到這一點(diǎn)的,就是一個(gè)優(yōu)秀的工具。至于你要求的代碼隱私性,不妨用其他的手段去達(dá)到,比如建立不同的項(xiàng)目庫(kù),針對(duì)不同的用戶(hù)組開(kāi)放等等。從某種角度上說(shuō),我認(rèn)為Clearcase也好,任何SCM軟件也好,都無(wú)法作為這位網(wǎng)友要求的這一點(diǎn)。為何?作為團(tuán)隊(duì)工作的代碼,你不讓別人看,不讓別人改,那還怎么一起工作?對(duì)SCM提這樣的要求,某種程度上已經(jīng)失去了版本管理和合作開(kāi)發(fā)的意義。
其實(shí)我真正像要向大家推薦的SCM工具是Git,這個(gè)工具我也是由同事領(lǐng)進(jìn)的門(mén),但是用過(guò)之后,我已經(jīng)完全依賴(lài)上了它。人們接受一個(gè)工具的最大的障礙在我看來(lái)有兩個(gè),一個(gè)是經(jīng)濟(jì)成本,一個(gè)是時(shí)間成本,很不幸,Clearcase在這兩方面成本都太高,所以你去看看個(gè)人或者中小型團(tuán)隊(duì)的開(kāi)發(fā)者,用這個(gè)工具的鳳毛麟角。而Git就好的多,經(jīng)濟(jì)成本幾乎沒(méi)有,跟SVN一樣;時(shí)間成本呢有一點(diǎn),需要從SVN的各種操作遷移到Git,但是也是一個(gè)非??焖俸秃?jiǎn)單的過(guò)程。
Git是什么?為什么有了SVN還要用Git?有一位網(wǎng)友的說(shuō)法我非常贊同,SVN有的功能,Git全部有,而Git還提供了比SVN更強(qiáng)大的功能,為什么不用Git?尤其是那些從其他SCM工具遷移到SVN的團(tuán)隊(duì),你們真的可以直接采用Git,當(dāng)然一般人都是用了一段SVN之后,再去用Git,然后發(fā)出感嘆,天哪,還有這么好用的工具。
Git = SVN 遠(yuǎn)程服務(wù)器 || N * SVN 本地服務(wù)器,這就是Git的基本結(jié)構(gòu)。注意我這里的符號(hào),是||,我想要強(qiáng)調(diào)的是git的這種分布式的特性。因?yàn)槲覀冎溃械念C布管理服務(wù)器都是C/S形式的,但是只有Git強(qiáng)調(diào)這一點(diǎn),那就是,一定要有一個(gè)本地庫(kù)。本地庫(kù)的重要性就在于相當(dāng)于我們?cè)谖覀兊拈_(kāi)發(fā)分支之外,又多了一重緩沖。當(dāng)我們的代碼復(fù)雜到了一定程度以后,我們有時(shí)候在開(kāi)發(fā)分支A上還要再建立開(kāi)發(fā)分支a,對(duì)其他工具而已,我對(duì)于a的每一次提交如果我想要能夠回退的話,我必須提交給server,Git也是,但是它可以只提交給本地的server,至于是不是真的有必要同步推送到遠(yuǎn)端server,你決定。本地server的另一個(gè)好處是,如果你的網(wǎng)絡(luò)狀況不好,那么你頻頻check in/check out/commit/update,那真的要費(fèi)了你的老命了。但是本地server會(huì)完美的緩沖這一切。所以Git的業(yè)務(wù)邏輯非常符合28原理,把80%的頻繁但是不那么重要的操作留在本地,把20%的重大的合并操作留給遠(yuǎn)端server,完美的提高你團(tuán)隊(duì)的工作效率。
最后,再來(lái)說(shuō)說(shuō),Git的工具鏈,固然Clearcase有值得羨慕的完備的工具集比如UCM/ClearQuest之類(lèi),但是Git也不差,與Gerrit/Gitblit集成可以加速我們的代碼Review過(guò)程,與Jekins集成可以達(dá)到發(fā)布和自動(dòng)化測(cè)試的目的。最重要的,這些工具都是免費(fèi),而且經(jīng)過(guò)了國(guó)內(nèi)外的同行的廣泛的驗(yàn)證。
有什么理由不讓我給你推薦Git呢?
聯(lián)系客服