Git flow工作流程

Git Flow 是什么

Git Flow是構(gòu)建在Git之上的一個(gè)組織軟件開發(fā)活動(dòng)的模型蒋得,是在Git之上構(gòu)建的一項(xiàng)軟件開發(fā)最佳實(shí)踐垒玲。Git Flow是一套使用Git進(jìn)行源代碼管理時(shí)的一套行為規(guī)范和簡化部分Git操作的工具。
  2010年5月,在一篇名為“一種成功的Git分支模型”的博文中劝贸,@nvie介紹了一種在Git之上的軟件開發(fā)模型。通過利用Git創(chuàng)建和管理分支的能力,為  每個(gè)分支設(shè)定具有特定的含義名稱,并將軟件生命周期中的各類活動(dòng)歸并到不同的分支上合蔽。實(shí)現(xiàn)了軟件開發(fā)過程不同操作的相互隔離。這種軟件開發(fā)的活動(dòng)模型被nwie稱為“Git Flow”满粗。
  一般而言辈末,軟件開發(fā)模型有常見的瀑布模型、迭代開發(fā)模型映皆、以及最近出現(xiàn)的敏捷開發(fā)模型等不同的模型挤聘。每種模型有各自應(yīng)用場景。Git Flow重點(diǎn)解決的是由于源代碼在開發(fā)過程中的各種沖突導(dǎo)致開發(fā)活動(dòng)混亂的問題捅彻。因此组去,Git flow可以很好的于各種現(xiàn)有開發(fā)模型相結(jié)合使用。
在開始研究Git Flow的具體內(nèi)容前步淹,下面這張圖可以看到模型的全貌(引自nvie的博文):

Git Flow中的分支

Git Flow模型中定義了主分支和輔助分支兩類分支从隆。其中主分支用于組織與軟件開發(fā)、部署相關(guān)的活動(dòng)缭裆;輔助分支組織為了解決特定的問題而進(jìn)行的各種開發(fā)活動(dòng)键闺。

主分支

主分支是所有開發(fā)活動(dòng)的核心分支。所有的開發(fā)活動(dòng)產(chǎn)生的輸出物最終都會反映到主分支的代碼中澈驼。主分支分為master分支和development分支辛燥。

master分支

master分支上存放的應(yīng)該是隨時(shí)可供在生產(chǎn)環(huán)境中部署的代碼(Production Ready state)。當(dāng)開發(fā)活動(dòng)告一段落缝其,產(chǎn)生了一份新的可供部署的代碼時(shí)挎塌,master分支上的代碼會被更新。同時(shí)内边,每一次更新榴都,最好添加對應(yīng)的版本號標(biāo)簽(TAG)。

develop分支

develop分支是保存當(dāng)前最新開發(fā)成果的分支漠其。通常這個(gè)分支上的代碼也是可進(jìn)行每日夜間發(fā)布的代碼(Nightly build)嘴高。因此這個(gè)分支有時(shí)也可以被稱作“integration branch”。
  當(dāng)develop分支上的代碼已實(shí)現(xiàn)了軟件需求說明書中所有的功能和屎,通過了所有的測試后阳惹,并且代碼已經(jīng)足夠穩(wěn)定時(shí),就可以將所有的開發(fā)成果合并回master分支了眶俩。對于master分支上的新提交的代碼建議都打上一個(gè)新的版本號標(biāo)簽(TAG)莹汤,供后續(xù)代碼跟蹤使用。
  因此颠印,每次將develop分支上的代碼合并回master分支時(shí)纲岭,我們都可以認(rèn)為一個(gè)新的可供在生產(chǎn)環(huán)境中部署的版本就產(chǎn)生了抹竹。通常而言,“僅在發(fā)布新的可供部署的代碼時(shí)才更新master分支上的代碼”是推薦所有人都遵守的行為準(zhǔn)則止潮∏耘校基于此,理論上說喇闸,每當(dāng)有代碼提交到master分支時(shí)袄琳,我們可以使用Git Hook觸發(fā)軟件自動(dòng)測試以及生產(chǎn)環(huán)境代碼的自動(dòng)更新工作。這些自動(dòng)化操作將有利于減少新代碼發(fā)布之后的一些事務(wù)性工作燃乍。

輔助分支

輔助分支是用于組織解決特定問題的各種軟件開發(fā)活動(dòng)的分支唆樊。輔助分支主要用于組織軟件新功能的并行開發(fā)、簡化新功能開發(fā)代碼的跟蹤刻蟹、輔助完成版本發(fā)布工作以及對生產(chǎn)代碼的缺陷進(jìn)行緊急修復(fù)工作逗旁。這些分支與主分支不同,通常只會在有限的時(shí)間范圍內(nèi)存在舆瘪。

輔助分支包括:

  • 用于開發(fā)新功能時(shí)所使用的feature分支片效;

  • 用于輔助版本發(fā)布的release分支;

  • 用于修正生產(chǎn)代碼中的缺陷的hotfix分支英古。

以上這些分支都有固定的使用目的和分支操作限制淀衣。從單純技術(shù)的角度說,這些分支與Git其他分支并沒有什么區(qū)別召调,但通過命名舌缤,我們定義了使用這些分支的方法。

feature分支

使用規(guī)范:

  • 可以從develop分支發(fā)起feature分支

  • 代碼必須合并回develop分支

  • feature分支的命名可以使用除master某残,develop,release-陵吸,hotfix-之外的任何名稱

feature分支(有時(shí)也可以被叫做“topic分支”)通常是在開發(fā)一項(xiàng)新的軟件功能的時(shí)候使用玻墅,這個(gè)分支上的代碼變更最終合并回develop分支或者干脆被拋棄掉(例如實(shí)驗(yàn)性且效果不好的代碼變更)。
  一般而言壮虫,feature分支代碼可以保存在開發(fā)者自己的代碼庫中而不強(qiáng)制提交到主代碼庫里澳厢。

release分支

使用規(guī)范:

  • 可以從develop分支派生

  • 必須合并回develop分支和master分支

  • 分支命名慣例:release-*

release分支是為發(fā)布新的產(chǎn)品版本而設(shè)計(jì)的。在這個(gè)分支上的代碼允許做小的缺陷修正囚似、準(zhǔn)備發(fā)布版本所需的各項(xiàng)說明信息(版本號剩拢、發(fā)布時(shí)間、編譯時(shí)間等等)饶唤。通過在release分支上進(jìn)行這些工作可以讓develop分支空閑出來以接受新的feature分支上的代碼提交徐伐,進(jìn)入新的軟件開發(fā)迭代周期。
  當(dāng)develop分支上的代碼已經(jīng)包含了所有即將發(fā)布的版本中所計(jì)劃包含的軟件功能募狂,并且已通過所有測試時(shí)办素,我們就可以考慮準(zhǔn)備創(chuàng)建release分支了角雷。而所有在當(dāng)前即將發(fā)布的版本之外的業(yè)務(wù)需求一定要確保不能混到release分支之內(nèi)(避免由此引入一些不可控的系統(tǒng)缺陷)。
  成功的派生了release分支性穿,并被賦予版本號之后勺三,develop分支就可以為“下一個(gè)版本”服務(wù)了。所謂的“下一個(gè)版本”是在當(dāng)前即將發(fā)布的版本之后發(fā)布的版本需曾。版本號的命名可以依據(jù)項(xiàng)目定義的版本號命名規(guī)則進(jìn)行吗坚。

hotfix分支

使用規(guī)范:

  • 可以從master分支派生

  • 必須合并回master分支和develop分支

  • 分支命名慣例:hotfix-*

除了是計(jì)劃外創(chuàng)建的以外,hotfix分支與release分支十分相似:都可以產(chǎn)生一個(gè)新的可供在生產(chǎn)環(huán)境部署的軟件版本呆万。
當(dāng)生產(chǎn)環(huán)境中的軟件遇到了異常情況或者發(fā)現(xiàn)了嚴(yán)重到必須立即修復(fù)的軟件缺陷的時(shí)候商源,就需要從master分支上指定的TAG版本派生hotfix分支來組織代碼的緊急修復(fù)工作。
  這樣做的顯而易見的好處是不會打斷正在進(jìn)行的develop分支的開發(fā)工作桑嘶,能夠讓團(tuán)隊(duì)中負(fù)責(zé)新功能開發(fā)的人與負(fù)責(zé)代碼緊急修復(fù)的人并行的開展工作炊汹。

更進(jìn)一步

Git Flow開發(fā)模型從源代碼管理角度對通常意義上的軟件開發(fā)活動(dòng)進(jìn)行了約束。應(yīng)該說逃顶,為我們的軟件開發(fā)提供了一個(gè)可供參考的管理模型讨便。Git Flow開發(fā)模型讓nvie的開發(fā)代碼倉庫保持整潔,讓小組各個(gè)成員之間的開發(fā)相互隔離以政,能夠有效避免處于開發(fā)狀態(tài)中的代碼相互影響而導(dǎo)致的效率低下和混亂霸褒。
  所謂模型,在不同的開發(fā)團(tuán)隊(duì)盈蛮,不同的文化废菱,不同的項(xiàng)目背景情況下都有可能需要進(jìn)行適當(dāng)?shù)牟眉艋驍U(kuò)充。祝各位好運(yùn)抖誉!
PS:為了簡化使用Git Flow模型時(shí)Git指令的復(fù)雜性殊轴,nvie開發(fā)出了一套 git增強(qiáng)指令集√宦可以運(yùn)行于Windows旁理、Linux、Unix和Mac操作系統(tǒng)之下我磁。有興趣的同學(xué)可以去看看孽文。

參考資料

基于git的源代碼管理模型——git flow
Git工作流指南:Gitflow工作流

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市夺艰,隨后出現(xiàn)的幾起案子芋哭,更是在濱河造成了極大的恐慌,老刑警劉巖郁副,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件减牺,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)烹植,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門斑鸦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人草雕,你說我怎么就攤上這事巷屿。” “怎么了墩虹?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵嘱巾,是天一觀的道長。 經(jīng)常有香客問我诫钓,道長旬昭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任菌湃,我火速辦了婚禮问拘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惧所。我一直安慰自己骤坐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布下愈。 她就那樣靜靜地躺著纽绍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪势似。 梳的紋絲不亂的頭發(fā)上拌夏,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機(jī)與錄音履因,去河邊找鬼障簿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛栅迄,可吹牛的內(nèi)容都是我干的站故。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼霞篡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了端逼?” 一聲冷哼從身側(cè)響起朗兵,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎顶滩,沒想到半個(gè)月后余掖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡礁鲁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年盐欺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赁豆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冗美,死狀恐怖魔种,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粉洼,我是刑警寧澤节预,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站属韧,受9級特大地震影響安拟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宵喂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一糠赦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锅棕,春花似錦拙泽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至顺少,卻和暖如春朋其,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背脆炎。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工梅猿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秒裕。 一個(gè)月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓袱蚓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親几蜻。 傳聞我的和親對象是個(gè)殘疾皇子喇潘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359

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

  • 引言 編寫的目的 -通過規(guī)范化的流程,使得產(chǎn)品梭稚、開發(fā)與測試等各個(gè)部門更高效的協(xié)同工作颖低。-通過規(guī)范化的流程使得產(chǎn)品高...
    一憶閱讀 34,946評論 12 87
  • 寫在前面:在網(wǎng)上能夠看到很多的關(guān)于git flow 工作流程的博客或者文章,我將我的工作中的git flow的管理...
    楊小強(qiáng)閱讀 1,759評論 0 3
  • 本文參考a-successful-git-branching-model Git flow是基于git之上的一種軟...
    同桌的桌閱讀 7,374評論 0 3
  • 今夜夏風(fēng)沉醉 我如是一只海上漂的小舟 這兒的風(fēng)是不是偷了冬夜的瓊汁玉露 怎能如此清爽怡人 像母親溫柔的雙手輕拂 像...
    野派閱讀 188評論 0 1
  • 2010年的港劇《讀心神探》中有這樣一個(gè)案子:主人公姚學(xué)琛的舊友美詩是一個(gè)記憶大師莺戒,因?yàn)橐恍┨厥獾氖虑榘槲耍c合伙人兼...
    碎碎念的又又閱讀 651評論 2 8