【學(xué)了就忘】Git介紹 — 6.Git的協(xié)作模式(二)

4囊嘉、GitFlow 工作流(最流行)

Gitflow工作流沒(méi)有用超出上面功能分支工作流的概念和命令,而是為不同的分支,分配一個(gè)很明確的角色柱宦,并定義分支之間如何交互,和什么時(shí)候進(jìn)行交互播瞳。

  • 除了有master主分支(用于存儲(chǔ)正式發(fā)布的歷史版本)外掸刊,還有一個(gè)作為功能集成分支的develop分支。

    當(dāng)初始化完成后赢乓,某個(gè)程序員想要開發(fā)一個(gè)功能忧侧,并不是直接從master分支上拉出新分支,而是使用develop分支作為父分支來(lái)拉出新分支牌芋。

    當(dāng)新功能完成后蚓炬,再合并回父分支,新功能的提交并不與master分支直接交互躺屁。

  • 一旦develop分支上有了做一次發(fā)布(或者說(shuō)快到了既定的發(fā)布日)的足夠功能肯夏,就從develop分支上checkout一個(gè)發(fā)布分支。

    新建的發(fā)布分支用于開始發(fā)布循環(huán)犀暑,所以從這個(gè)時(shí)間點(diǎn)開始之后新的功能驯击,不能再加到這個(gè)分支上,該分支只應(yīng)該做Bug修復(fù)耐亏、文檔生成和其它面向發(fā)布任務(wù)余耽。

    一旦對(duì)外發(fā)布的工作都完成了,發(fā)布分支合并到master分支苹熏,并分配一個(gè)版本號(hào)打好Tag碟贾。

    另外,這些從新建發(fā)布分支以來(lái)的做的修改轨域,要合并回develop分支上袱耽。

  • 維護(hù)分支或說(shuō)是熱修復(fù)(hotfix)分支用于,快速給產(chǎn)品發(fā)布版本(production releases)打補(bǔ)丁干发,這是唯一可以直接從master分支fork出來(lái)的分支朱巨。

    修復(fù)完成,修改應(yīng)該馬上合并回master分支和develop分支(當(dāng)前的發(fā)布分支)枉长,master分支應(yīng)該用新的版本號(hào)打好Tag冀续。

    為Bug修復(fù)使用專門分支,讓團(tuán)隊(duì)可以快速處理掉問(wèn)題必峰,而不用打斷其它工作或是等待下一個(gè)發(fā)布循環(huán)洪唐。

    你可以把維護(hù)分支想成是一個(gè)直接在master分支上處理的臨時(shí)發(fā)布。

總結(jié)就是Gitflow 工作流通過(guò)為功能開發(fā)吼蚁、發(fā)布準(zhǔn)備維護(hù)設(shè)立了獨(dú)立的分支凭需,讓發(fā)布迭代過(guò)程更流暢,充分的利用了分支的特點(diǎn)。嚴(yán)格的分支模型也為大型項(xiàng)目提供了一些非常必要的結(jié)構(gòu)粒蜈。

下圖是完整的Gitflow 工作流開發(fā)方式圖顺献,但實(shí)際開發(fā)工作環(huán)境可能會(huì)精簡(jiǎn):

Gitflow工作流總結(jié):

  • 適用人群:任何開發(fā)團(tuán)隊(duì),熟悉Git分支的團(tuán)隊(duì)枯怖。

  • 工作方式:

    • 項(xiàng)目維護(hù)者創(chuàng)建項(xiàng)目維護(hù)者的遠(yuǎn)程倉(cāng)庫(kù)注整,創(chuàng)建master分支與develop分支,貢獻(xiàn)者可讀不可寫度硝。
    • 每個(gè)貢獻(xiàn)者git clone遠(yuǎn)程倉(cāng)庫(kù)中的develop分支到本地倉(cāng)庫(kù)肿轨。(記住,develop分支相當(dāng)于master的分支塘淑,包括功能開發(fā),修改蚂斤,測(cè)試存捺。master分支相當(dāng)于最終分支)
    • 每個(gè)貢獻(xiàn)者在本地倉(cāng)庫(kù)創(chuàng)建自己的feature分支,在feature分支上開發(fā)曙蒸。
    • 在feature分支又可以創(chuàng)建多個(gè)feature分支捌治,繼續(xù)開發(fā)項(xiàng)目。
    • 每個(gè)貢獻(xiàn)者每次開發(fā)完成就git commit到本地倉(cāng)庫(kù)中自己的feature分支纽窟, 接著git push到遠(yuǎn)程倉(cāng)庫(kù)肖油。
    • 通過(guò)pull request提醒項(xiàng)目維護(hù)者,瀏覽貢獻(xiàn)者提交feature分支臂港。
    • 項(xiàng)目維護(hù)者把feature分支拉下來(lái)森枪,然后合并到自己本地倉(cāng)庫(kù)的develop分支上測(cè)試。
    • 組長(zhǎng)測(cè)試feature分支通過(guò)之后审孽,由組長(zhǎng)負(fù)責(zé)把feature分支合并到遠(yuǎn)程倉(cāng)庫(kù)的develop分支上县袱。
    • 項(xiàng)目維護(hù)者會(huì)release分支上git tag打上版本號(hào)。
    • 項(xiàng)目維護(hù)者可以從develop分支創(chuàng)建release分支佑力,接著把release分支合并到master分支上式散,同時(shí)master分支同步到develop分支。
    • 項(xiàng)目維護(hù)者在遠(yuǎn)程倉(cāng)庫(kù)把合并過(guò)的feature分支刪除打颤。
    • 每個(gè)貢獻(xiàn)者在本地倉(cāng)庫(kù)把合并過(guò)的feature分支刪除暴拄。
    • 每個(gè)貢獻(xiàn)者將本地倉(cāng)庫(kù)分支切換為develop分支,然后git pull將本地倉(cāng)庫(kù)的master分支更新到遠(yuǎn)程倉(cāng)庫(kù)的develop分支版本编饺。

PS:Gitflow工作流是Vincent Driessen工程師提出的多分支工作流乖篷。

5、Forking 工作流(偶爾使用)

分叉(Forking)工作流也可以叫做分布式工作流透且,是在 GitFlow工作流的基礎(chǔ)上的衍生那伐,充分利用了Git在分支和克隆上的優(yōu)勢(shì),再加上pull request 的功能,以達(dá)到代碼審核的目的罕邀。既可以管理大團(tuán)隊(duì)的開發(fā)者(developer)的提交畅形,也可以接受不信任貢獻(xiàn)者(contributor)的提交。

這種工作流使得每個(gè)開發(fā)者都有一個(gè)服務(wù)端倉(cāng)庫(kù)(此倉(cāng)庫(kù)只有自己可以push推送诉探,但是所有人都可以pull拉取修改)日熬,每個(gè)程序員都push代碼到自己的服務(wù)端倉(cāng)庫(kù),但不能push到正式倉(cāng)庫(kù)肾胯,只有項(xiàng)目維護(hù)者才能push到正式倉(cāng)庫(kù)竖席,這樣項(xiàng)目維護(hù)者可以接受任何開發(fā)者的提交,但無(wú)需給他正式代碼庫(kù)的寫權(quán)限敬肚。

這種工作流適合開源社區(qū)的開源項(xiàng)目毕荐,大家統(tǒng)一對(duì)項(xiàng)目做貢獻(xiàn),但是有一個(gè)人或一個(gè)團(tuán)隊(duì)作為開發(fā)者來(lái)管理項(xiàng)目艳馒,所有的貢獻(xiàn)者的代碼由開發(fā)者審核憎亚,其功能完善之后再由開發(fā)者push到正式倉(cāng)庫(kù)中。

總結(jié):

  • 分叉(Forking)工作流更適合安全可靠地管理大團(tuán)隊(duì)的開發(fā)者弄慰,而且能接受不信任貢獻(xiàn)者的提交第美。
  • 在實(shí)際工作中,如果偶爾有需要團(tuán)隊(duì)外的成員幫我們解決問(wèn)題時(shí)陆爽,可能會(huì)用到什往。
  • 這種工作流程并不常用,只有當(dāng)項(xiàng)目極為龐雜慌闭,或者需要多級(jí)別管理時(shí)别威,才會(huì)體現(xiàn)出優(yōu)勢(shì)。 利用這種方式驴剔,項(xiàng)目總負(fù)責(zé)人(即主管)可以把大量分散的集成工作兔港,委托給不同的小組負(fù)責(zé)人分別處理,然后在不同時(shí)刻將大塊的代碼子集統(tǒng)籌起來(lái)仔拟,用于之后的整合衫樊。

提示:

  • 每個(gè)成員都可以從中央版本庫(kù)中拉取代碼。
  • 每級(jí)成員都只能向上一級(jí)提交代碼利花。
  • 上一級(jí)合并代碼之后繼續(xù)向上級(jí)提交代碼科侈。
  • 最后只有獨(dú)裁者才能向中央版本庫(kù)提交代碼。

分叉工作流(分布式倉(cāng)庫(kù)工作流)總結(jié):

  • 適用人群:大型開發(fā)團(tuán)隊(duì)炒事,熟悉Git分支的團(tuán)隊(duì)臀栈。

  • 工作方式:

    • 主項(xiàng)目維護(hù)者創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù),創(chuàng)建一個(gè)master分支挠乳,從項(xiàng)目維護(hù)者可讀不可寫权薯。

    • 從項(xiàng)目維護(hù)者通過(guò)fork主項(xiàng)目維護(hù)者的遠(yuǎn)程倉(cāng)庫(kù)的副本姑躲,到自己的遠(yuǎn)程倉(cāng)庫(kù),包括master分支盟蚣。(記住黍析,從項(xiàng)目維護(hù)者的遠(yuǎn)程倉(cāng)庫(kù)獨(dú)立于主項(xiàng)目維護(hù)者的遠(yuǎn)程倉(cāng)庫(kù))

    • 從項(xiàng)目維護(hù)者git clone主項(xiàng)目維護(hù)者的遠(yuǎn)程倉(cāng)庫(kù)的副本到本地倉(cāng)庫(kù)。

    • 從項(xiàng)目維護(hù)者創(chuàng)建自己的feature分支屎开,在feature分支上開發(fā)翻伺。

    • 從項(xiàng)目維護(hù)者每次開發(fā)完成就git commit到本地倉(cāng)庫(kù)中自己的feature分支驹马, 接著git push到遠(yuǎn)程倉(cāng)庫(kù)赏表。

    • 通過(guò)pull request命令叫搁,從項(xiàng)目維護(hù)者合并自己feature分支,到從項(xiàng)目維護(hù)者的遠(yuǎn)程倉(cāng)庫(kù)的master分支上逞度。

    • 從項(xiàng)目維護(hù)者在遠(yuǎn)程倉(cāng)庫(kù)把合并過(guò)的feature分支刪除额划。

    • 從項(xiàng)目維護(hù)者在本地倉(cāng)庫(kù)把合并過(guò)的feature分支刪除。

    • 從項(xiàng)目維護(hù)者在遠(yuǎn)程倉(cāng)庫(kù)通過(guò)pull request向主項(xiàng)目維護(hù)者的遠(yuǎn)程倉(cāng)庫(kù)的推送档泽。

    • 主項(xiàng)目維護(hù)者通過(guò)pull request獲取從項(xiàng)目維護(hù)者的遠(yuǎn)程倉(cāng)庫(kù)的推送俊戳。

    • 主項(xiàng)目維護(hù)者進(jìn)行從項(xiàng)目維護(hù)者的遠(yuǎn)程倉(cāng)庫(kù)代碼審查,測(cè)試茁瘦。

    • 主項(xiàng)目維護(hù)者確認(rèn)無(wú)誤后品抽,可以直接合并到主項(xiàng)目維護(hù)者的遠(yuǎn)程倉(cāng)庫(kù)储笑。

6甜熔、總結(jié)

上面介紹了在Git分布式系統(tǒng)中經(jīng)常使用的工作流程,但是在實(shí)際的開發(fā)中突倍,你會(huì)遇到許多可能適合你的特定工作流程的變種腔稀,你可以按照實(shí)際的情況,靈活的進(jìn)行組合和拓展羽历。

參考:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末焊虏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子秕磷,更是在濱河造成了極大的恐慌诵闭,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澎嚣,死亡現(xiàn)場(chǎng)離奇詭異疏尿,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)易桃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門褥琐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人晤郑,你說(shuō)我怎么就攤上這事敌呈∶澈辏” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵磕洪,是天一觀的道長(zhǎng)吭练。 經(jīng)常有香客問(wèn)我,道長(zhǎng)褐鸥,這世上最難降的妖魔是什么线脚? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮叫榕,結(jié)果婚禮上浑侥,老公的妹妹穿的比我還像新娘。我一直安慰自己晰绎,他們只是感情好寓落,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著荞下,像睡著了一般伶选。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尖昏,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天仰税,我揣著相機(jī)與錄音,去河邊找鬼抽诉。 笑死陨簇,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的迹淌。 我是一名探鬼主播河绽,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼唉窃!你這毒婦竟也來(lái)了耙饰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤纹份,失蹤者是張志新(化名)和其女友劉穎苟跪,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔓涧,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡件已,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蠢笋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拨齐。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖昨寞,靈堂內(nèi)的尸體忽然破棺而出瞻惋,到底是詐尸還是另有隱情厦滤,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布歼狼,位于F島的核電站掏导,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏羽峰。R本人自食惡果不足惜趟咆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梅屉。 院中可真熱鬧值纱,春花似錦、人聲如沸坯汤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)惰聂。三九已至疆偿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搓幌,已是汗流浹背杆故。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留溉愁,地道東北人处铛。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像叉钥,于是被迫代替她去往敵國(guó)和親罢缸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子篙贸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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