什么是GITFLOW工作流朦促?

大家好膝晾,我是IT修真院北京分院第22期學(xué)員,一枚正直善良的web程序員务冕。

1.背景介紹

什么是Git工作流玷犹?

Git工作流你可以理解為工作中團(tuán)隊(duì)成員遵守的一種代碼管理方案,在Git中有以下幾種工作流方案作為方案指導(dǎo)

1洒疚、集中式工作流

2歹颓、功能分支工作流

3、Gitflow工作流

4油湖、Forking工作流

2.知識(shí)剖析

集中式工作流:

這種工作方式跟svn類似巍扛,它只有一個(gè)master分支,開發(fā)者會(huì)先把遠(yuǎn)程的倉(cāng)庫(kù)克隆到本地乏德,之后的修 改和提交都在本地操作撤奸,直到在某個(gè)合適的時(shí)間點(diǎn)將本地的代碼合入到遠(yuǎn)程master。這種工作流比 較適合小團(tuán)隊(duì)喊括,因?yàn)樾F(tuán)隊(duì)可能不會(huì)太多的協(xié)作和合流的動(dòng)作胧瓜。

3.常見問(wèn)題

Gitflow工作流的工作方式?
4.解決方案

Gitflow工作流是經(jīng)典模型,處于核心位置郑什,體現(xiàn)了工作流的經(jīng)驗(yàn)和精髓府喳。

Gitflow工作流通過(guò)為功能開發(fā)、發(fā)布準(zhǔn)備和維護(hù)分配獨(dú)立的分支蘑拯,讓發(fā)布迭代過(guò)程更流暢钝满。嚴(yán)格的分支模型也為大型項(xiàng)目提供了一些非常必要的結(jié)構(gòu)兜粘。

歷史分支

相對(duì)使用僅有的一個(gè)master分支,Gitflow工作流使用2個(gè)分支來(lái)記錄項(xiàng)目的歷史弯蚜。 master分支存儲(chǔ)了正式發(fā)布的歷史孔轴,而develop分支作為功能的集成分支。 這樣也方便master分支上的所有提交分配一個(gè)版本號(hào)碎捺。


功能分支

每個(gè)新功能位于一個(gè)自己的分支路鹰,這樣可以push到中央倉(cāng)庫(kù)以備份和協(xié)作。 但功能分支不是從master分支上拉出新分支收厨,而是使用develop分支作為父分支悍引。 當(dāng)新功能完成時(shí),合并回develop分支帽氓。 新功能提交應(yīng)該從不直接與master分支交互。 從各種含義和目的上來(lái)看俩块,功能分支加上develop分支就是功能分支工作流的用法黎休。但Gitflow工作流沒有在這里止步。


發(fā)布分支

一旦develop分支上有了做一次發(fā)布(或者說(shuō)快到了既定的發(fā)布日)的足夠功能玉凯,就從develop分支上checkout一個(gè)發(fā)布分支势腮。 新建的分支用于開始發(fā)布循環(huán),所以從這個(gè)時(shí)間點(diǎn)開始之后新的功能不能再加到這個(gè)分支上—— 這個(gè)分支只應(yīng)該做Bug修復(fù)漫仆、文檔生成和其它面向發(fā)布任務(wù)捎拯。 一旦對(duì)外發(fā)布的工作都完成了, 發(fā)布分支合并到master分支并分配一個(gè)版本號(hào)打好Tag盲厌。 另外署照,這些從新建發(fā)布分支以來(lái)的做的修改要合并回develop分支。

使用一個(gè)用于發(fā)布準(zhǔn)備的專門分支吗浩,使得一個(gè)團(tuán)隊(duì)可以在完善當(dāng)前的發(fā)布版本的同時(shí)建芙,另一個(gè)團(tuán)隊(duì)可以繼續(xù)開發(fā)下個(gè)版本的功能。 這也打造定義良好的開發(fā)階段懂扼。


維護(hù)分支

維護(hù)分支或說(shuō)是熱修復(fù)(hotfix)分支用于生成快速給產(chǎn)品發(fā)布版本(production releases)打補(bǔ)丁禁荸, 這是唯一可以直接從master分支fork出來(lái)的分支。 修復(fù)完成阀湿,修改應(yīng)該馬上合并回master分支和dev elop分支(當(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ā)布。

5.編碼實(shí)戰(zhàn)
由于本次均為理論性內(nèi)容灾挨,所以以示例為主

下面的示例演示本工作流如何用于管理單個(gè)發(fā)布循環(huán)啊央。假設(shè)你已經(jīng)創(chuàng)建了一個(gè)中央倉(cāng)庫(kù)眶诈。創(chuàng)建開發(fā)分支

1、第一步為master分支配套一個(gè)develop分支瓜饥。簡(jiǎn)單來(lái)做可以本地創(chuàng)建一個(gè)空的develop分支逝撬,push到服務(wù)器上。 以后這個(gè)分支將會(huì)包含了項(xiàng)目的全部歷史乓土,而master分支將只包含了部分歷史宪潮。 其它開發(fā)者這時(shí)應(yīng)該克隆中央倉(cāng)庫(kù),建好develop分支的跟蹤分支: 現(xiàn)在每個(gè)開發(fā)都有了這些歷史分支的本地拷貝趣苏。

小紅和小明開始開發(fā)新功能

這個(gè)示例中狡相,小紅和小明開始各自的功能開發(fā)。他們需要為各自的功能創(chuàng)建相應(yīng)的分支食磕。

新分支不是基于master分支尽棕,而是應(yīng)該基于develop分支,

他們用老套路添加提交到各自功能分支上:編輯彬伦、暫存滔悉、提交。

小紅完成功能開發(fā)

添加了提交后单绑,小紅覺得她的功能OK了回官。如果團(tuán)隊(duì)使用Pull Requests,這時(shí)候可以發(fā)起一個(gè)用于合并到develop分支搂橙。 否則她可以直接合并到她本地的develop分支后push到中央倉(cāng)歉提。 在合并功能前確保develop分支是最新的。注意区转,功能決不應(yīng)該直接合并到master分支苔巨。沖突解決方法和集中式工作流一樣。

小紅開始準(zhǔn)備發(fā)布

這個(gè)時(shí)候小明正在實(shí)現(xiàn)他的功能废离,小紅開始準(zhǔn)備她的第一個(gè)項(xiàng)目正式發(fā)布恋拷。 像功能開發(fā)一樣,她用一個(gè)新的分支來(lái)做發(fā)布準(zhǔn)備厅缺。這一步也確定了發(fā)布的版本號(hào)蔬顾。

這個(gè)分支是清理發(fā)布、執(zhí)行所有測(cè)試湘捎、更新文檔和其它為下個(gè)發(fā)布做準(zhǔn)備操作的地方诀豁,像是一個(gè)專門用于改善發(fā)布的功能分支。 只要小紅創(chuàng)建這個(gè)分支并push到中央倉(cāng)庫(kù),這個(gè)發(fā)布就是功能凍結(jié)的。任何不在develop分支中的新功能都推到下個(gè)發(fā)布循環(huán)中枕扫。

小紅完成發(fā)布

一旦準(zhǔn)備好了對(duì)外發(fā)布丧荐,小紅合并修改到master分支和develop分支上烹骨,刪除發(fā)布分支翻伺。

合并回develop分支很重要,因?yàn)樵诎l(fā)布分支中已經(jīng)提交的更新需要在后面的新功能中也要是可用的沮焕。

發(fā)布分支是作為功能開發(fā)(develop分支)和對(duì)外發(fā)布(master分支)間的緩沖吨岭。 只要有合并到master分支,就應(yīng)該打好Tag以方便跟蹤峦树。

Git有提供各種勾子(hook)辣辫,即倉(cāng)庫(kù)有事件發(fā)生時(shí)觸發(fā)執(zhí)行的腳本。 可以配置一個(gè)勾子魁巩,在你push中央倉(cāng)庫(kù)的master分支時(shí)急灭,自動(dòng)構(gòu)建好對(duì)外發(fā)布。

最終用戶發(fā)現(xiàn)Bug

對(duì)外發(fā)布后谷遂,小紅回去和小明一起做下個(gè)發(fā)布的新功能開發(fā)葬馋,直到有最終用戶開了一個(gè)Ticket抱怨當(dāng)前版本的一個(gè)Bug。 為了處理Bug肾扰,小紅(或小明)從master分支上拉出了一個(gè)維護(hù)分支畴嘶,提交修改以解決問(wèn)題,然后直接合并回master分支白对。 就像發(fā)布分支,維護(hù)分支中新加這些重要修改需要包含到develop分支中换怖,所以小紅要執(zhí)行一個(gè)合并操作甩恼。 然后就可以安全地刪除這個(gè)分支了。

最終用戶發(fā)現(xiàn)Bug

對(duì)外發(fā)布后沉颂,小紅回去和小明一起做下個(gè)發(fā)布的新功能開發(fā)条摸,直到有最終用戶開了一個(gè)Ticket抱怨當(dāng)前版本的一個(gè)Bug。 為了處理Bug铸屉,小紅(或小明)從master分支上拉出了一個(gè)維護(hù)分支钉蒲,提交修改以解決問(wèn)題,然后直接合并回master分支彻坛。 就像發(fā)布分支顷啼,維護(hù)分支中新加這些重要修改需要包含到develop分支中,所以小紅要執(zhí)行一個(gè)合并操作昌屉。 然后就可以安全地刪除這個(gè)分支了钙蒙。

6.擴(kuò)展思考

SourceTree里GitFlow的使用

1、初始化

SourceTree會(huì)自動(dòng)化進(jìn)行一些操作间驮,最明顯的變化是項(xiàng)目代碼庫(kù)里自動(dòng)增加了一個(gè)develop的分支躬厌。

將新創(chuàng)建的develop分支推送到遠(yuǎn)端倉(cāng)庫(kù)。

從此竞帽,代碼庫(kù)里就存在了兩個(gè)永久性的分支:master和develop扛施,未來(lái)所有的開發(fā)工作都圍繞這兩個(gè)分支進(jìn)行派生跟合并鸿捧。

之前提到,項(xiàng)目里有兩個(gè)永久的分支:master和develop疙渣。這兩個(gè)分支也被稱為“歷史性”分支匙奴,在其后的開發(fā)工作中, Gitflow模型支持在feature昌阿、release饥脑、hotfix分支上折騰,這樣也有效避免了不同類型的開發(fā)工作在代碼層級(jí)的耦合和干擾懦冰。

這三個(gè)分支的用途灶轰、派生來(lái)源分支和合并目標(biāo)分支如下:

feature,功能開發(fā)分支刷钢,用于承接具體功能需求的開發(fā)

派生于develop

合并于develop

hotfix笋颤,bug修復(fù)分支,用于解決線上運(yùn)行環(huán)境發(fā)現(xiàn)的bug

派生于master

合并于master内地、develop

release伴澄,版本發(fā)布分支,用于完成發(fā)布準(zhǔn)備的

派生于develop

合并于master阱缓、develop

跟“歷史性”分支相反非凌,這三類分支都是短期分支,針對(duì)他們的工作內(nèi)容完成后荆针,一般都要進(jìn)行刪除敞嗡。工作內(nèi)容完成的標(biāo)識(shí)有兩個(gè):開發(fā)完成、合并完成航背,缺一不可喉悴。

我們使用sourcetree來(lái)實(shí)際演示一下

三類臨時(shí)性分支中,hotfix和release的結(jié)果都要合并到master和develop中玖媚,為什么箕肃?因?yàn)樗鼈兊男薷慕Y(jié)果持續(xù)影響這后續(xù)的開發(fā)和維護(hù),必須合并以保證代碼的一致性今魔。 如果你沒有認(rèn)識(shí)到這個(gè)特性很有用勺像,那是因?yàn)槟愕拈_發(fā)工作還沒有復(fù)雜到一個(gè)程度,一個(gè)必須要規(guī)避代碼干擾错森、保證并行推進(jìn)的程度咏删。 對(duì)于小型項(xiàng)目和團(tuán)隊(duì)來(lái)說(shuō),基于GIT的中心式協(xié)作模型和特性分支模型就足夠了问词;GitFlow模型適合中型督函、大型項(xiàng)目和團(tuán)隊(duì)。

7.參考文獻(xiàn)

參考一:Git工作流指南

參考二:Git 工作流的一些經(jīng)驗(yàn)分享

參考三:SourceTree里GitFlow的使用

8.更多討論

1.這個(gè)工作流是必須的嗎?by雪飛

不辰狡,這只是一個(gè)開發(fā)流程的規(guī)范锋叨,你不按照他照樣可以開發(fā),比如咱們官網(wǎng)的開發(fā)流程就不是這樣宛篇。

2.那咱們官網(wǎng)開發(fā)流程是什么娃磺。 by婷婷

先理一下葡萄藤的開發(fā)流程;

三個(gè)文件夾:后端叫倍,前臺(tái)偷卧,后臺(tái),前后臺(tái)文件夾里有各自的branch吆倦,tag听诸,trunk,trunk放主要開發(fā)的版本蚕泽,tag用來(lái)放進(jìn)行功能升級(jí)后的版本號(hào)晌梨,在wiki上登記發(fā)布功能,版本號(hào)须妻,回滾版本號(hào)仔蝌,各個(gè)負(fù)責(zé)人名字,截圖發(fā)郵件給運(yùn)維發(fā)布到測(cè)試環(huán)境荒吏,經(jīng)過(guò)測(cè)試人員測(cè)試通過(guò)后發(fā)布到線上環(huán)境敛惊。

3.trunk到底放著那個(gè)版本?by yg

大佬解釋:trunk是正在玩的游戲绰更,tag是 保存的游戲記錄

視頻鏈接:https://pan.baidu.com/s/1jHE1jls 密碼: 8zrt

ppt鏈接:https://ptteng.github.io/PPT/PPT/css-02-What%20is%20Gitflow%20Workflow-yanggang.html#/

今天的分享就到這里啦瞧挤,歡迎大家點(diǎn)贊、轉(zhuǎn)發(fā)动知、留言皿伺、拍磚~

------------------------------------------------------------------------------------------------------------------------

技能樹.IT修真院

“我們相信人人都可以成為一個(gè)工程師员辩,現(xiàn)在開始盒粮,找個(gè)師兄,帶你入門奠滑,掌控自己學(xué)習(xí)的節(jié)奏丹皱,學(xué)習(xí)的路上不再迷茫”宋税。

這里是技能樹.IT修真院摊崭,成千上萬(wàn)的師兄在這里找到了自己的學(xué)習(xí)路線,學(xué)習(xí)透明化杰赛,成長(zhǎng)可見化呢簸,師兄1對(duì)1免費(fèi)指導(dǎo)。快來(lái)與我一起學(xué)習(xí)吧?根时!

猛戳這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瘦赫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蛤迎,更是在濱河造成了極大的恐慌确虱,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件替裆,死亡現(xiàn)場(chǎng)離奇詭異校辩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)辆童,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門宜咒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人胸遇,你說(shuō)我怎么就攤上這事荧呐。” “怎么了纸镊?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵倍阐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我逗威,道長(zhǎng)峰搪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任凯旭,我火速辦了婚禮概耻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘罐呼。我一直安慰自己鞠柄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布嫉柴。 她就那樣靜靜地躺著厌杜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪计螺。 梳的紋絲不亂的頭發(fā)上夯尽,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音登馒,去河邊找鬼匙握。 笑死,一個(gè)胖子當(dāng)著我的面吹牛陈轿,可吹牛的內(nèi)容都是我干的圈纺。 我是一名探鬼主播秦忿,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蛾娶!你這毒婦竟也來(lái)了小渊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茫叭,失蹤者是張志新(化名)和其女友劉穎酬屉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揍愁,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呐萨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了莽囤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谬擦。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖朽缎,靈堂內(nèi)的尸體忽然破棺而出惨远,到底是詐尸還是另有隱情,我是刑警寧澤话肖,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布北秽,位于F島的核電站,受9級(jí)特大地震影響最筒,放射性物質(zhì)發(fā)生泄漏贺氓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一床蜘、第九天 我趴在偏房一處隱蔽的房頂上張望辙培。 院中可真熱鬧,春花似錦邢锯、人聲如沸扬蕊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尾抑。三九已至,卻和暖如春鸥鹉,著一層夾襖步出監(jiān)牢的瞬間蛮穿,已是汗流浹背庶骄。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工毁渗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人单刁。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓灸异,卻偏偏與公主長(zhǎng)得像府适,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子肺樟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • 1.背景介紹 什么是Git工作流么伯? Git工作流你可以理解為工作中團(tuán)隊(duì)成員遵守的一種代碼管理方案疟暖,在Git中有以下...
    cczhuc閱讀 9,424評(píng)論 1 21
  • 多種多樣的工作流使得在項(xiàng)目中實(shí)施Git時(shí)變得難以選擇。這份教程提供了一個(gè)出發(fā)點(diǎn)田柔,調(diào)查企業(yè)團(tuán)隊(duì)最常見的Git工作流俐巴。...
    JSErik閱讀 4,372評(píng)論 2 8
  • 夜深人靜欣舵,一個(gè)人在孤獨(dú)的城市,越發(fā)的顯得形單影只缀磕。 而每當(dāng)這個(gè)時(shí)刻缘圈,我便想起了你,原來(lái)袜蚕,孤獨(dú)和你糟把,都是財(cái)富。 雛菊...
    吐煙圈兒閱讀 1,078評(píng)論 1 0
  • 筆桿網(wǎng)試用---功能篇(二) 之提綱推薦 上一篇我寫得論文寫作的選題分析功能牲剃,選題分析作為一篇論文的靈魂部分糊饱,是重...
    岫巖jennifer閱讀 835評(píng)論 0 1
  • 夏天在看書,對(duì)面是個(gè)女孩颠黎,我和她側(cè)坐在桌邊另锋。她的書簽在翻書的時(shí)候滑落到地上,是一個(gè)很精致的書簽狭归,上面綁著紅色的絲帶...
    番茄戰(zhàn)吼閱讀 201評(píng)論 0 2