一颁湖、主分支Master
首先,代碼庫(kù)應(yīng)該有一個(gè)例隆、且僅有一個(gè)主分支花嘶。所有提供給用戶(hù)使用的正式版本婿斥,都在這個(gè)主分支上發(fā)布。
Git主分支的名字,默認(rèn)叫做Master州叠。它是自動(dòng)建立的,版本庫(kù)初始化以后危融,默認(rèn)就是在主分支在進(jìn)行開(kāi)發(fā)挖胃。
二、開(kāi)發(fā)分支Develop
主分支只用來(lái)分布重大版本坞古,日常開(kāi)發(fā)應(yīng)該在另一條分支上完成备韧。我們把開(kāi)發(fā)用的分支,叫做Develop绸贡。
這個(gè)分支可以用來(lái)生成代碼的最新隔夜版本(nightly)盯蝴。如果想正式對(duì)外發(fā)布毅哗,就在Master分支上,對(duì)Develop分支進(jìn)行"合并"(merge)捧挺。
Git創(chuàng)建Develop分支的命令:
git checkout -b develop master
將Develop分支發(fā)布到Master分支的命令:
# 切換到Master分支
git checkout master
# 對(duì)Develop分支進(jìn)行合并
git merge --no-ff develop
這里稍微解釋一下虑绵,上一條命令的--no-ff參數(shù)是什么意思。默認(rèn)情況下闽烙,Git執(zhí)行"快進(jìn)式合并"(fast-farward merge)翅睛,會(huì)直接將Master分支指向Develop分支。
使用--no-ff參數(shù)后黑竞,會(huì)執(zhí)行正常合并捕发,在Master分支上生成一個(gè)新節(jié)點(diǎn)。為了保證版本演進(jìn)的清晰很魂,我們希望采用這種做法扎酷。關(guān)于合并的更多解釋?zhuān)?qǐng)參考Benjamin Sandofsky的《Understanding the Git Workflow》。
三遏匆、臨時(shí)性分支
前面講到版本庫(kù)的兩條主要分支:Master和Develop法挨。前者用于正式發(fā)布,后者用于日常開(kāi)發(fā)幅聘。其實(shí)凡纳,常設(shè)分支只需要這兩條就夠了,不需要其他了帝蒿。
但是荐糜,除了常設(shè)分支以外,還有一些臨時(shí)性分支葛超,用于應(yīng)對(duì)一些特定目的的版本開(kāi)發(fā)暴氏。臨時(shí)性分支主要有三種:
* 功能(feature)分支
* 預(yù)發(fā)布(release)分支
* 修補(bǔ)bug(fixbug)分支
這三種分支都屬于臨時(shí)性需要,使用完以后绣张,應(yīng)該刪除偏序,使得代碼庫(kù)的常設(shè)分支始終只有Master和Develop。
四胖替、 功能分支
接下來(lái)研儒,一個(gè)個(gè)來(lái)看這三種"臨時(shí)性分支"。
第一種是功能分支独令,它是為了開(kāi)發(fā)某種特定功能端朵,從Develop分支上面分出來(lái)的。開(kāi)發(fā)完成后燃箭,要再并入Develop冲呢。
功能分支的名字,可以采用feature-*的形式命名招狸。
創(chuàng)建一個(gè)功能分支:
git checkout -b feature-x develop
開(kāi)發(fā)完成后敬拓,將功能分支合并到develop分支:
git checkout develop
git merge --no-ff feature-x
刪除feature分支:
git branch -d feature-x
五邻薯、預(yù)發(fā)布分支
第二種是預(yù)發(fā)布分支,它是指發(fā)布正式版本之前(即合并到Master分支之前)乘凸,我們可能需要有一個(gè)預(yù)發(fā)布的版本進(jìn)行測(cè)試厕诡。
預(yù)發(fā)布分支是從Develop分支上面分出來(lái)的,預(yù)發(fā)布結(jié)束以后营勤,必須合并進(jìn)Develop和Master分支灵嫌。它的命名,可以采用release-*的形式葛作。
創(chuàng)建一個(gè)預(yù)發(fā)布分支:
git checkout -b release-1.2 develop
確認(rèn)沒(méi)有問(wèn)題后寿羞,合并到master分支:
git checkout master
git merge --no-ff release-1.2
# 對(duì)合并生成的新節(jié)點(diǎn),做一個(gè)標(biāo)簽
git tag -a 1.2
再合并到develop分支:
git checkout develop
git merge --no-ff release-1.2
最后赂蠢,刪除預(yù)發(fā)布分支:
git branch -d release-1.2
六绪穆、修補(bǔ)bug分支
最后一種是修補(bǔ)bug分支。軟件正式發(fā)布以后虱岂,難免會(huì)出現(xiàn)bug霞幅。這時(shí)就需要?jiǎng)?chuàng)建一個(gè)分支,進(jìn)行bug修補(bǔ)量瓜。
修補(bǔ)bug分支是從Master分支上面分出來(lái)的。修補(bǔ)結(jié)束以后途乃,再合并進(jìn)Master和Develop分支绍傲。它的命名,可以采用fixbug-*的形式耍共。
創(chuàng)建一個(gè)修補(bǔ)bug分支:
git checkout -b fixbug-0.1 master
修補(bǔ)結(jié)束后烫饼,合并到master分支:
git checkout master
git merge --no-ff fixbug-0.1
git tag -a 0.1.1
再合并到develop分支:
git checkout develop
git merge --no-ff fixbug-0.1
最后,刪除"修補(bǔ)bug分支":
git branch -d fixbug-0.1
操作規(guī)范實(shí)例
介紹
我們采用Git-flow的分支結(jié)構(gòu)和思想试读,中心倉(cāng)庫(kù)包含了兩個(gè)主要分支杠纵,這兩個(gè)分支的壽命是無(wú)限的:
?master
????????????????????????develop
同時(shí),我們會(huì)用到幾個(gè)支持性分支:
????????????????????????release
?hotfix
應(yīng)用
要求:
????????開(kāi)發(fā)的同學(xué)不要向master分支提交代碼钩骇,由負(fù)責(zé)發(fā)布的同學(xué)統(tǒng)一合并比藻。
? ? ? ? 原則上,所有需要進(jìn)入develop或release的代碼都需要通過(guò)pull request進(jìn)行代碼review倘屹,review通過(guò)后再merge银亲。
????????開(kāi)發(fā)的同學(xué),請(qǐng)先在github上fork倉(cāng)庫(kù)纽匙,切換到develop進(jìn)行開(kāi)發(fā)务蝠,開(kāi)發(fā)完成后向中心倉(cāng)庫(kù)提交pull request。
????????進(jìn)入stablelization階段的Sprint烛缔,由負(fù)責(zé)發(fā)布的同學(xué)創(chuàng)建release分支馏段,之后僅對(duì)release進(jìn)行bug-fixing轩拨。待release達(dá)到發(fā)布狀態(tài)時(shí),將release合并到master分支院喜,并tag亡蓉;同時(shí)合并到develop分支。然后finish該release分支够坐。
版本號(hào)
版本號(hào)組成:..
: 主版本號(hào)寸宵,該版本號(hào)的遞增會(huì)比較慎重,一般意味著可能有產(chǎn)品設(shè)計(jì)上的重構(gòu)元咙,可能存在兼容性變化√萦埃現(xiàn)階段我們使用0,等產(chǎn)品上線(xiàn)時(shí)再討論要不要升級(jí)到1.
: 從版本號(hào)庶香,該版本號(hào)反應(yīng)功能升級(jí)甲棍,隨著每個(gè)sprint進(jìn)行遞增。
: 熱修復(fù)版本號(hào)赶掖,在一個(gè)版本已經(jīng)發(fā)布到線(xiàn)上感猛,需要進(jìn)行該版本的熱修復(fù)時(shí),遞增該版本號(hào)奢赂。每個(gè)Sprint的第一個(gè)版本的hotfix號(hào)為0.
開(kāi)發(fā)準(zhǔn)備
fork
首先陪白,從中心倉(cāng)庫(kù)Fork一個(gè)克隆倉(cāng)庫(kù)到自己github下(之后建議在setting里,將默認(rèn)branch設(shè)置為develop)膳灶。
clone
將fork到自己賬戶(hù)下的倉(cāng)庫(kù)clone到本地(請(qǐng)使用https地址)咱士;
add remote
本地終端運(yùn)行如下命令,添加中心倉(cāng)庫(kù)的remote
$ git remote add center [中心倉(cāng)庫(kù)地址]
至此轧钓,所有的準(zhǔn)備工作已經(jīng)完成序厉,你可以在fork出的倉(cāng)庫(kù)下,切換到develop分支進(jìn)行開(kāi)發(fā)了毕箍。
代碼提交及更新
// add要提交的文件
$ git add xxx
// 添加描述并commit文件
$ git commit -m "develop create new class"
[vulcan eafcdd8] branch test
1 file changed, 1 deletion(-)
//更新center倉(cāng)庫(kù)代碼到本地develop弛房,此時(shí)如果有沖突,請(qǐng)本地手動(dòng)解沖突而柑,重新提交沖突文件
$ git pull center develop
// push到你的fork倉(cāng)庫(kù)
$ git push
Everything up-to-date
現(xiàn)在文捶,你可以到github上,在你fork的倉(cāng)庫(kù)下媒咳,發(fā)起Pull請(qǐng)求了(請(qǐng)注意檢查merge的倉(cāng)庫(kù)是否正確)拄轻。
作者:誰(shuí)在烽煙彼岸
鏈接:http://www.reibang.com/p/8c77bb085f0c
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)伟葫,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處恨搓。