Git分支管理是門藝術(shù)

英文原文:http://www.nvie.com/posts/a-successful-git-branching-model/****
  原文作者:Vincent Driessen
  本文經(jīng)Linux大棚博主總結(jié)精簡(jiǎn)而成艺栈。
  1
  GIT舵匾,在技術(shù)層面上,絕對(duì)是一個(gè)無(wú)中心的分布式版本控制系統(tǒng)埋哟,但在管理層面上,我建議你保持一個(gè)中心版本庫(kù)郎汪。

centr-decentr

  2
  我建議赤赊,一個(gè)中心版本庫(kù)(我們叫它origin)至少包括兩個(gè)分支,即“主分支(master)”和“開(kāi)發(fā)分支(develop)”
git-master-develop

  3
  要確保:團(tuán)隊(duì)成員從主分支(master)獲得的都是處于可發(fā)布狀態(tài)的代碼煞赢,而從開(kāi)發(fā)分支(develop)應(yīng)該總能夠獲得最新開(kāi)發(fā)進(jìn)展的代碼抛计。
  4
  在一個(gè)團(tuán)隊(duì)開(kāi)發(fā)協(xié)作中,我建議照筑,要有“輔助分支”的概念吹截。
  5
  “輔助分支”录豺,大體包括如下幾類:“管理功能開(kāi)發(fā)”的分支、“幫助構(gòu)建可發(fā)布代碼”的分支饭弓、“可以便捷的修復(fù)發(fā)布版本關(guān)鍵BUG”的分支双饥,等等。
  6
  “輔助分支”的最大特點(diǎn)就是“生命周期十分有限”弟断,完成使命后即可被清除咏花。
  7
  我建議至少還應(yīng)設(shè)置三類“輔助分支”,我們稱之為“Feature branches”阀趴,“Release branches”昏翰,“Hotfix branches”。
  至此刘急,我們形成了如下這張最重要的組織組棚菊,包含了兩個(gè)粗體字分支(master/develop)和三個(gè)細(xì)體字分支(feature/release/hotfixes)。
bigpicture-git-branch-all

  8
  “Feature branches”叔汁,起源于develop分支统求,最終也會(huì)歸于develop分支。
  9
  “Feature branches”常用于開(kāi)發(fā)一個(gè)獨(dú)立的新功能据块,且其最終的結(jié)局必然只有兩個(gè)码邻,其一是合并入“develop”分支,其二是被拋棄另假。最典型的“Fearture branches”一定是存在于團(tuán)隊(duì)開(kāi)發(fā)者那里像屋,而不應(yīng)該是“中心版本庫(kù)”中。
  10
  “Feature branches”起源于“develop”分支边篮,實(shí)現(xiàn)方法是:
git checkout -b myfeature develop
  11
  “Feature branches”最終也歸于“develop”分支己莺,實(shí)現(xiàn)方式是:
git checkout devleopgit merge --no-ff myfeature(--no-ff,即not fast forward戈轿,其作用是:要求git merge即使在fast forward條件下也要產(chǎn)生一個(gè)新的merge commit)(此處凌受,要求采用--no-ff的方式進(jìn)行分支合并,其目的在于凶杖,希望保持原有“Feature branches”整個(gè)提交鏈的完整性)git branch -d myfeaturegit push origin develop
merge-without-ff

  12
  “Release branch”胁艰,起源于develop分支,最終歸于“develop”或“master”分支智蝠。這類分支建議命名為“release-
  
13*
  “Relase branch”通常負(fù)責(zé)“短期的發(fā)布前準(zhǔn)備工作”腾么、“小bug的修復(fù)工作”、“版本號(hào)等元信息的準(zhǔn)備工作”杈湾。與此同時(shí)解虱,“develop”分支又可以承接下一個(gè)新功能的開(kāi)發(fā)工作了。
  14
  “Release branch”產(chǎn)生新提交的最好時(shí)機(jī)是“develop”分支已經(jīng)基本到達(dá)預(yù)期的狀態(tài)漆撞,至少希望新功能已經(jīng)完全從“Feature branches”合并到“develop”分支了殴泰。
  15
  創(chuàng)建“Release branches”于宙,方法是:
git checkout -b release-1.2 develop./bump-version.sh 1.2 (這個(gè)腳本用于將代碼所有涉及版本信息的地方都統(tǒng)一修改到1.2,另外悍汛,需要用戶根據(jù)自己的項(xiàng)目去編寫(xiě)適合的bump-version.sh)git commit -a -m "Bumped version number to 1.2"
  16
  在一段短時(shí)間內(nèi)捞魁,在“Release branches”上,我們可以繼續(xù)修復(fù)bug离咐。在此階段谱俭,嚴(yán)禁新功能的并入,新功能應(yīng)該是被合并到“develop”分支的宵蛀。
  17
  經(jīng)過(guò)若干bug修復(fù)后昆著,“Release branches”上的代碼已經(jīng)達(dá)到可發(fā)布狀態(tài),此時(shí)术陶,需要完成三個(gè)動(dòng)作:第一是將“Release branches”合并到“master”分支凑懂,第二是一定要為master上的這個(gè)新提交打TAG(記錄里程碑),第三是要將“Release branches”合并回“develop”分支梧宫。
git checkout mastergit merge --no-ff release-1.2git tag -a 1.2 (使用-u/-s/-a參數(shù)會(huì)創(chuàng)建tag對(duì)象接谨,而非軟tag)git checkout developgit merge --no-ff release-1.2git branch -d release-1.2
  18
  “Hotfix branches”源于“master”,歸于“develop”或“master”祟敛,通常命名為“hotfix-
  
19*
  “Hotfix branches”類似于“Release branch”疤坝,但產(chǎn)生此分支總是非預(yù)期的關(guān)鍵BUG兆解。
  20
  建議設(shè)立“Hotfix branches”的原因是:希望避免“develop分支”新功能的開(kāi)發(fā)必須為BUG修復(fù)讓路的情況馆铁。
hotfix-branches1

  21
  建立“Hotfix branches”,方法是:
git checkout -b hotfix-1.2.1 master./bump-version.sh 1.2.1git commit -a -m "Bumpt version to 1.2.1" (然后可以開(kāi)始問(wèn)題修復(fù)工作)git commit -m "Fixed severe production problem" (在問(wèn)題修復(fù)后锅睛,進(jìn)行第二次提交)
  22
  BUG修復(fù)后埠巨,需要將“Hotfix branches”合并回“master”分支,同時(shí)也需要合并回“develop”分支现拒,方法是:
git checkout mastergit merge --no-ff hotfix-1.2.1git tag -a 1.2.1git checkout developgit merge --no-ff hotfix-1.2.1git branch -d hotfix-1.2.1
  23
  還記得文章開(kāi)始時(shí)的那張大圖么辣垒,我建議你把這幅大圖從這里下載下來(lái),打印出來(lái)印蔬,貼在你寫(xiě)字臺(tái)的墻壁上勋桶,好處不言而喻。
  over~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末侥猬,一起剝皮案震驚了整個(gè)濱河市例驹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌退唠,老刑警劉巖鹃锈,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異瞧预,居然都是意外死亡屎债,警方通過(guò)查閱死者的電腦和手機(jī)仅政,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)盆驹,“玉大人圆丹,你說(shuō)我怎么就攤上這事∏” “怎么了运褪?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)玖瘸。 經(jīng)常有香客問(wèn)我秸讹,道長(zhǎng),這世上最難降的妖魔是什么雅倒? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任璃诀,我火速辦了婚禮,結(jié)果婚禮上蔑匣,老公的妹妹穿的比我還像新娘劣欢。我一直安慰自己,他們只是感情好裁良,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布凿将。 她就那樣靜靜地躺著,像睡著了一般价脾。 火紅的嫁衣襯著肌膚如雪牧抵。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,713評(píng)論 1 312
  • 那天侨把,我揣著相機(jī)與錄音犀变,去河邊找鬼。 笑死秋柄,一個(gè)胖子當(dāng)著我的面吹牛获枝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播骇笔,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼省店,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了笨触?” 一聲冷哼從身側(cè)響起懦傍,我...
    開(kāi)封第一講書(shū)人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎旭旭,沒(méi)想到半個(gè)月后谎脯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡持寄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年源梭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了娱俺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡废麻,死狀恐怖荠卷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烛愧,我是刑警寧澤油宜,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站怜姿,受9級(jí)特大地震影響慎冤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沧卢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一蚁堤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧但狭,春花似錦披诗、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至唱歧,卻和暖如春宪摧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背迈喉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工绍刮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挨摸。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像岁歉,于是被迫代替她去往敵國(guó)和親得运。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

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