常見(jiàn) git 工作流

我記得本科時(shí)寫(xiě)論文,當(dāng)時(shí)不會(huì)版本管理工具北戏,每天都是按時(shí)間后綴備份個(gè)新文件夾负芋;某同學(xué)提醒我用 Git,我還不屑一顧——無(wú)知又自負(fù)嗜愈。最近旧蛾,我和一些非軟件相關(guān)行業(yè)的朋友聊天,他們竟然也是用 Git 做版本控制的蠕嫁,還用得很溜锨天。想來(lái),高效的生產(chǎn)工具在任何行業(yè)都是共通的剃毒。今天就借機(jī)聊聊我們?cè)谏a(chǎn)中常用到的幾種 Git 工作流程绍绘。

入門(mén)版

入門(mén)版 Git 模型只有一個(gè)默認(rèn)的 master 分支,操作基本無(wú)外乎 pull 和 push迟赃。

Starter

這種工作流很簡(jiǎn)單陪拘,我自己寫(xiě)博客就是一個(gè)入門(mén)版 master 分支:每天寫(xiě)一點(diǎn),順道加個(gè) commit 標(biāo)記一下纤壁,基本就沒(méi)啥他用了左刽。學(xué)生時(shí)代,我還見(jiàn)過(guò)某對(duì)小情侶 PK A 題酌媒,他們也是這種 Git 模式欠痴,回想起來(lái)還是挺有趣的。不過(guò)工程生產(chǎn)中秒咨,應(yīng)該不會(huì)有團(tuán)隊(duì)使用這種工作流喇辽;缺點(diǎn)顯而易見(jiàn):沖突和回滾的代價(jià)太大了。

普通版

組成開(kāi)發(fā)團(tuán)隊(duì)后雨席,我們得確保不會(huì)直接操作主分支了菩咨。最樸素的工作流就是:

  1. 開(kāi)發(fā)新功能前,每個(gè)人從 master 分支切出一條專(zhuān)屬的 feature 分支
  2. 功能實(shí)現(xiàn)后陡厘,將 feature 分支合并到 master 分支
  3. 假如出現(xiàn)沖突抽米,在自己的分支里解決沖突,再?lài)L試合并
Basic

這種工作流算是正式開(kāi)啟了團(tuán)隊(duì)成員的“并發(fā)”工作糙置。每個(gè)人只需關(guān)注自己的分支云茸,即便有沖突也是在自己熟悉的分支代碼上修改。

主分支功能單一谤饭,只需注意 MR(Merge Request)标捺,這使得集成一些自動(dòng)化操作變得簡(jiǎn)單可行了懊纳。新功能合并到 master 分支,會(huì)立即觸發(fā)生產(chǎn)環(huán)境的部署亡容;這確實(shí)挺方便的嗤疯,但是副作用也很明顯:生產(chǎn)環(huán)境變得不穩(wěn)定——新功能只在本地開(kāi)發(fā)環(huán)境證明可行,線(xiàn)上就不見(jiàn)得了萍倡。那該如何改進(jìn)呢身弊?

專(zhuān)業(yè)版

我們需要一個(gè)中間態(tài)辟汰,一個(gè)既能快速合并新功能列敲,又能證明線(xiàn)上運(yùn)行可行的分支——develop 分支。

Professional

develop 反映的是最新的代碼實(shí)現(xiàn)效果:

  • develop 是從上一迭代的 master 切出的分支
  • feature 則由 develop 分支切分出來(lái)帖汞;新功能實(shí)現(xiàn)后戴而,第一時(shí)間就合并到 develop 上
  • 遇到 bug 也是先修復(fù) develop 代碼
  • 通常 develop 分支也能觸發(fā)自動(dòng)化部署——staging 環(huán)境——幫助開(kāi)發(fā)或測(cè)試人員第一時(shí)間看到線(xiàn)上部署的效果

master 則是相對(duì)穩(wěn)定的分支:

  • master 分支只由充分測(cè)試后的 develop 分支合并而來(lái)
  • master 代碼可以直接部署到生成環(huán)境,或是交由 shipment 團(tuán)隊(duì)發(fā)布到商業(yè)環(huán)境中
  • master 分支每次更新后翩蘸,通常會(huì)打個(gè) tag所意,用于標(biāo)記版本號(hào)

我自己所屬的團(tuán)隊(duì)曾長(zhǎng)期使用這種 Git 工作流。在一個(gè)開(kāi)發(fā)迭代里催首,如果有很明確的開(kāi)發(fā)階段和測(cè)試階段扶踊,這種工作流還是很實(shí)用的。只不過(guò)郎任,有時(shí)候測(cè)試方速度較慢秧耗,甚至能拖到下一個(gè)迭代中,這時(shí)的 develop 分支就比較尷尬了——既要處理新周期 feature舶治,又要修復(fù)上一迭代的 bug分井,顯然力不從心了。

旗艦版

如何解決上述煩惱霉猛?再加一個(gè)中間態(tài)唄——release 分支尺锚。

Release 分支

當(dāng)某一迭代的新功能開(kāi)發(fā)完畢后,我們會(huì)從 develop 分支切出一個(gè) release 分支:

  • Release 分支一般用作 bugfix惜浅,絕大多數(shù)的人工測(cè)試——包括 Scenario 測(cè)試瘫辩、回歸測(cè)試、UI 測(cè)試等等——都會(huì)基于這個(gè)分支的代碼進(jìn)行坛悉;此外杭朱,Release 也可能合并一些文檔,或是非功能相關(guān)的業(yè)務(wù)代碼吹散,但是切記加入與該發(fā)布版本不相關(guān)的信息弧械。
  • 而 develop 分支基本只服務(wù)于開(kāi)發(fā)人員;release 測(cè)試階段空民,develop 也可以同步進(jìn)行下一迭代的功能開(kāi)發(fā)刃唐。

Release 代碼被充分測(cè)試后羞迷,就可以合并到 master 分支,并打上版本 tag画饥;與此同時(shí)衔瓮,Release 也需要立馬合并回 develop 分支,使 develop 分支保持最新代碼抖甘。

Hotfix 分支

這里還存在一個(gè)問(wèn)題热鞍,假如 master 分支的代碼又發(fā)現(xiàn)了新的 bug,該如何處理衔彻?

Master 指向的是生產(chǎn)環(huán)境薇宠,修復(fù)生產(chǎn)環(huán)境的 bug 就是所謂的打補(bǔ)丁(patch)了艰额。我們通常會(huì)從 master 的特定 tag 上切出一個(gè)叫 hotfix 的分支澄港;bug 修復(fù)后,再合并回 master柄沮。使用 hotfix 分支的好處就是“快”——迅速修復(fù)回梧、迅速發(fā)布,避開(kāi)了 develop -> release -> master 的冗長(zhǎng)步驟祖搓。

打完補(bǔ)丁后狱意,我們也應(yīng)盡快將 hotfix 代碼 cherry-pick 到最近的 release 分支或是 develop 分支,使分支保持最新代碼拯欧。

Ultimate

這種 Git 工作流最早是在十年前详囤,由一個(gè)叫Vincent Driessen的作者發(fā)布于自己的博客上,之后被迅速借鑒到各大公司的軟件工程上哈扮。后來(lái)纬纪,他還自己開(kāi)發(fā)了一個(gè) git 擴(kuò)展工具——gitflow,指導(dǎo)開(kāi)發(fā)人員使用這套開(kāi)發(fā)流程管理代碼滑肉。

但是遇到更復(fù)雜的業(yè)務(wù)場(chǎng)景包各,我們又該怎么繼續(xù)擴(kuò)展 git 工作流呢?很簡(jiǎn)單靶庙,無(wú)限地添加不同命名的分支问畅。

沒(méi)有一個(gè)問(wèn)題是一個(gè)中間態(tài)不能解決的,如果有就再加一個(gè)中間態(tài)六荒!

我就聽(tīng)說(shuō)過(guò)類(lèi)似的事护姆,某廠(chǎng)要長(zhǎng)期同時(shí)開(kāi)發(fā)三個(gè)迭代周期的分支。要知道每個(gè)迭代光開(kāi)發(fā)就是數(shù)個(gè)月掏击;每個(gè)分支又會(huì)處在不同階段的測(cè)試周期中卵皂,什么時(shí)候結(jié)束還不知道;每個(gè)分支各自的依賴(lài)本身還在升級(jí)砚亭;還會(huì)接受客戶(hù)的要求灯变,在不同版本的分支里添加新需求殴玛。大家可以思考一下該怎么管理分支。

小結(jié)

OK添祸,這期介紹了四種開(kāi)發(fā)中常用到的 git 工作流滚粟,建議大家按照實(shí)際需求選取一種模式。也沒(méi)必要一上來(lái)就搞“旗艦版”刃泌,上述四種模式我都體驗(yàn)過(guò)凡壤,也是隨著項(xiàng)目變更逐步升級(jí)到進(jìn)階版的。很多時(shí)候耙替,我們的工程并沒(méi)有那么復(fù)雜亚侠,完全可以在其他方面動(dòng)腦經(jīng)解決問(wèn)題,而不是無(wú)限地增加分支林艘。Git 只是一款工具盖奈,不是解決問(wèn)題的關(guān)鍵混坞,人才是狐援!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市究孕,隨后出現(xiàn)的幾起案子啥酱,更是在濱河造成了極大的恐慌,老刑警劉巖厨诸,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镶殷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡微酬,警方通過(guò)查閱死者的電腦和手機(jī)绘趋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)颗管,“玉大人陷遮,你說(shuō)我怎么就攤上這事】呀” “怎么了帽馋?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)比吭。 經(jīng)常有香客問(wèn)我绽族,道長(zhǎng),這世上最難降的妖魔是什么衩藤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任吧慢,我火速辦了婚禮,結(jié)果婚禮上赏表,老公的妹妹穿的比我還像新娘检诗。我一直安慰自己怖喻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布岁诉。 她就那樣靜靜地躺著锚沸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涕癣。 梳的紋絲不亂的頭發(fā)上哗蜈,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音坠韩,去河邊找鬼距潘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛只搁,可吹牛的內(nèi)容都是我干的音比。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼氢惋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼洞翩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起焰望,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤骚亿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后熊赖,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體来屠,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年震鹉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俱笛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡传趾,死狀恐怖迎膜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情墨缘,我是刑警寧澤星虹,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站镊讼,受9級(jí)特大地震影響宽涌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蝶棋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一卸亮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧玩裙,春花似錦兼贸、人聲如沸段直。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鸯檬。三九已至,卻和暖如春螺垢,著一層夾襖步出監(jiān)牢的瞬間喧务,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工枉圃, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留功茴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓孽亲,卻偏偏與公主長(zhǎng)得像坎穿,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子返劲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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

  • Git 規(guī)范 所有使用了本規(guī)范的項(xiàng)目玲昧,必須嚴(yán)格規(guī)范操作,否則不予以合并代碼旭等、提測(cè)酌呆、打包上線(xiàn)等后續(xù)操作衡载。 基本要求 ...
    zgsddzwj閱讀 13,617評(píng)論 1 14
  • 開(kāi)篇 Git 三大特色搔耕,分支,暫存區(qū)痰娱,工作流弃榨,今天終于要寫(xiě)到 WorkFlow 了,我彷佛已經(jīng)看到勝利的曙光梨睁,走起...
    段淺淺兒閱讀 2,362評(píng)論 0 4
  • 前言 大家好鲸睛!在下游回來(lái)了!不啰嗦快進(jìn)正題坡贺!本篇文章是面對(duì)剛開(kāi)始接觸Git的新手官辈,所講命令并不全,在文章結(jié)束會(huì)放入...
    老匡話(huà)Android閱讀 3,922評(píng)論 -2 18
  • 導(dǎo)言 現(xiàn)在開(kāi)發(fā)過(guò)程中使用的版本管理工具多數(shù)都是Git遍坟,Git很強(qiáng)大的一個(gè)功能是分支管理拳亿,那么在開(kāi)發(fā)過(guò)程中,對(duì)于分支...
    左大人閱讀 795評(píng)論 0 1
  • 多種多樣的工作流使得在項(xiàng)目中實(shí)施Git時(shí)變得難以選擇愿伴。這份教程提供了一個(gè)出發(fā)點(diǎn)肺魁,調(diào)查企業(yè)團(tuán)隊(duì)最常見(jiàn)的Git工作流。...
    JSErik閱讀 4,403評(píng)論 2 8