版本控制系統(tǒng)

“代碼”作為軟件研發(fā)的核心產(chǎn)物,在整個(gè)開(kāi)發(fā)周期都在遞增,不斷合入新需求以及解決bug的新patch,這就需要有一款系統(tǒng),能夠存儲(chǔ)、追蹤文件的修改歷史,記錄多個(gè)版本的開(kāi)發(fā)和維護(hù)。于是,版本控制系統(tǒng)(Version Control Systems)應(yīng)運(yùn)而生,主要分為兩類,集中式和分布式。

集中式版本控制系統(tǒng)

集中式版本控制系統(tǒng)的特點(diǎn)是只有一臺(tái)中央服務(wù)器,存放著所有研發(fā)數(shù)據(jù),而其它客戶端機(jī)器上保存的是中央服務(wù)器最新版本的文件快照,不包括項(xiàng)目文件的變更歷史。所以,每個(gè)相關(guān)人員工作開(kāi)始前,都需要從這臺(tái)中央服務(wù)器同步最新版本,才能開(kāi)始工作。

集中式版本控制系統(tǒng)的優(yōu)點(diǎn):

1.操作簡(jiǎn)單,使用沒(méi)有難度,可輕松上手。

2.文件夾級(jí)權(quán)限控制,權(quán)限控制粒度小。

3.對(duì)客戶端配置要求不高,無(wú)需存儲(chǔ)全套代碼。

集中式版本控制系統(tǒng)的缺點(diǎn):

1.網(wǎng)絡(luò)環(huán)境要求高,相關(guān)人員必須聯(lián)網(wǎng)才能工作。

2.中央服務(wù)器的單點(diǎn)故障影響全局,如果服務(wù)器宕機(jī),所有人都無(wú)法工作。

3.中央服務(wù)器在沒(méi)有備份的情況下,磁盤一旦被損壞,將丟失所有數(shù)據(jù)。

分布式版本控制系統(tǒng)

分布式版本控制系統(tǒng)的特點(diǎn)是每個(gè)客戶端都是代碼倉(cāng)庫(kù)的完整鏡像,包括項(xiàng)目文件的變更歷史。所有數(shù)據(jù)分布的存儲(chǔ)在每個(gè)客戶端,不存在中央服務(wù)器。可能有人會(huì)問(wèn),我們公司使用Git分布式存儲(chǔ)工具,也有“中央服務(wù)器”啊?其實(shí),這個(gè)所謂的“中央服務(wù)器”僅僅是用來(lái)方便管理多人協(xié)作,任何一臺(tái)客戶端都可以勝任它的工作,它和所有客戶端沒(méi)有本質(zhì)區(qū)別。

分布式版本控制系統(tǒng)的優(yōu)點(diǎn):

1.版本庫(kù)本地化,版本庫(kù)的完整克隆,包括標(biāo)簽、分支、版本記錄等。

2.支持離線提交,適合跨地域協(xié)同開(kāi)發(fā)。

3.分支切換快速高效,創(chuàng)建和銷毀分支廉價(jià)。

分布式版本控制系統(tǒng)的缺點(diǎn):

1.學(xué)習(xí)成本高,不容易上手。

2.只能針對(duì)整個(gè)倉(cāng)庫(kù)創(chuàng)建分支,無(wú)法根據(jù)目錄建立層次性的分支。

 

 

SVN vs Git

SVN和Git作為集中式和分布式版本控制系統(tǒng)的代表,都有廣大的使用群體,兩者的優(yōu)缺點(diǎn)經(jīng)常被比較。其實(shí),工具對(duì)我們來(lái)說(shuō),就是幫助我們有效提升工作的效率與質(zhì)量,最適合的就是最好的。我們引用幾個(gè)開(kāi)發(fā)場(chǎng)景來(lái)看看兩個(gè)版本控制工具的適用范圍。

場(chǎng)景一:

公司A,非純技術(shù)開(kāi)發(fā),項(xiàng)目包含大量媒體設(shè)計(jì)文件,相關(guān)人員只需下載自己關(guān)注的部分文件;員工PC電腦配置不高,沒(méi)有空間拷貝整個(gè)項(xiàng)目資料。

適用:SVN

分析:只需公司有一個(gè)足夠大的服務(wù)器硬盤,員工本地只存儲(chǔ)自己相關(guān)的文件夾,不必下載不想關(guān)的媒體文件,避免浪費(fèi)文件傳輸時(shí)間。

場(chǎng)景二:

公司B,嵌入式底層開(kāi)發(fā),項(xiàng)目人員較多并且分布在兩個(gè)城市,代碼龐大;用分支管理多機(jī)種并行開(kāi)發(fā),機(jī)種間經(jīng)常相互合并新特性,新patch。

適用:Git

分析:

1.Git有能力高效管理類似Linux內(nèi)核一樣的超大規(guī)模項(xiàng)目;

2.Git實(shí)現(xiàn)了離線開(kāi)發(fā)、代碼審核特性,解決了跨地域協(xié)同開(kāi)發(fā)中代碼質(zhì)量和編碼協(xié)同的問(wèn)題;

3.分支管理功能強(qiáng)大,便于查詢和追溯分支間的提交歷史;

4.Git基于DAG(有向非環(huán)圖)的設(shè)計(jì)比SVN的線性提交提供更好的合并追蹤,避免不必要的沖突,提高工作效率

場(chǎng)景三:

公司C,某行業(yè)軟件開(kāi)發(fā),包含敏感重要數(shù)據(jù),代碼倉(cāng)庫(kù)和版本發(fā)布權(quán)限掌握在客戶手中,代碼安全要求高,公司開(kāi)發(fā)人員先將代碼提交到本地倉(cāng)庫(kù),只有在客戶審核通過(guò)才能提交到發(fā)布倉(cāng)庫(kù)。

適用:Git

分析:

1.Git通過(guò)哈希加密保證數(shù)據(jù)的完整性,防止惡意篡改;

2.代碼分布存儲(chǔ),異地容災(zāi),保證數(shù)據(jù)安全;

3.Git支持團(tuán)隊(duì)成員自建本地版本庫(kù)和分支,只有客戶發(fā)出合并請(qǐng)求,開(kāi)發(fā)人員才能提交代碼,客戶可以對(duì)提交說(shuō)明、代碼規(guī)范等方面逐一審核。

總結(jié)

不難看出,Git憑借自身的優(yōu)勢(shì),完美解決了大多數(shù)公司對(duì)版本控制工具的訴求。在當(dāng)今敏捷開(kāi)發(fā)成為主流,研發(fā)周期短,跨地域協(xié)同開(kāi)發(fā)多的大形勢(shì)下,選擇Git是大勢(shì)所趨。也正因?yàn)槿绱?,?guó)內(nèi)外有很多基于Git的云端代碼托管服務(wù),目前,作者就正在使用華為軟件開(kāi)發(fā)云(https://www.hwclouds.com/devcloud/)配置管理服務(wù)托管代碼,后面我也會(huì)詳細(xì)介紹它的使用方法。

http://www.cnblogs.com/goldenfish/p/6876864.html