git 的操作規(guī)范

一颁湖、主分支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)注明出處恨搓。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子斧抱,更是在濱河造成了極大的恐慌常拓,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辉浦,死亡現(xiàn)場(chǎng)離奇詭異弄抬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)宪郊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)掂恕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人弛槐,你說(shuō)我怎么就攤上這事懊亡。” “怎么了乎串?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵店枣,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我叹誉,道長(zhǎng)鸯两,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任长豁,我火速辦了婚禮钧唐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘匠襟。我一直安慰自己钝侠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布宅此。 她就那樣靜靜地躺著,像睡著了一般爬范。 火紅的嫁衣襯著肌膚如雪父腕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,837評(píng)論 1 290
  • 那天青瀑,我揣著相機(jī)與錄音璧亮,去河邊找鬼。 笑死斥难,一個(gè)胖子當(dāng)著我的面吹牛枝嘶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哑诊,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼群扶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起竞阐,我...
    開(kāi)封第一講書(shū)人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缴饭,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后骆莹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體颗搂,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年幕垦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丢氢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡先改,死狀恐怖疚察,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盏道,我是刑警寧澤稍浆,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站猜嘱,受9級(jí)特大地震影響衅枫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜朗伶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一弦撩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧论皆,春花似錦益楼、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至粒督,卻和暖如春陪竿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背屠橄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工族跛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锐墙。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓礁哄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親溪北。 傳聞我的和親對(duì)象是個(gè)殘疾皇子桐绒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容