Git筆記與思考六:工作流

工作流秦士,講的是對(duì)項(xiàng)目版本管理的一套操作流程規(guī)范缺厉。
在SVN時(shí)代,大家別無(wú)選擇隧土,都是從同一個(gè)分支上開(kāi)發(fā)提针,提交,解決沖突曹傀。
用Git做版本管理后辐脖,得益于其分布式能力,大家就可以不依賴中央版本庫(kù)皆愉,各自獨(dú)立開(kāi)發(fā)嗜价,提交,再在適當(dāng)時(shí)候合并幕庐。因其靈活性而產(chǎn)生了多種多樣的工作流久锥。

集中式工作流

當(dāng)然,你也可以忽略Git的分布式能力异剥,忽略方便快捷的分支控制能力瑟由,在Git上用出Svn的感覺(jué),反正你開(kāi)心就好啦冤寿。這種在一個(gè)分支上進(jìn)行協(xié)作的方式错妖,我們也給它起個(gè)名,就叫集中式工作流疚沐。
所有人都在一個(gè)分支上開(kāi)發(fā)暂氯,優(yōu)點(diǎn)還是有的:

  1. 簡(jiǎn)單粗暴易操作,適合不太復(fù)雜的小項(xiàng)目
  2. 每一次提交亮蛔,都解決一次沖突痴施,化大沖突為小沖突。
  3. 當(dāng)需要依賴他人的工作輸出時(shí),或者說(shuō)與他人工作的耦合度高時(shí)辣吃,能方便工作快速推進(jìn)动遭。
    但是缺點(diǎn)也非常明顯:
  4. 提交歷史混亂,從提交歷史上難以追蹤一個(gè)完整功能的提交情況神得。
  5. 每次提交都有沖突的可能厘惦,假如沖突不好解決,或者合并了他人有問(wèn)題的代碼哩簿,就會(huì)打斷自己的工作節(jié)奏宵蕉。
  6. 不利于code review,不利于代碼質(zhì)量管理

Git Flow

我們應(yīng)該在一個(gè)功能节榜,或者叫特性羡玛,開(kāi)發(fā)完成后,才與他人代碼進(jìn)行合并宗苍。
這時(shí)需要為一個(gè)個(gè)特性的開(kāi)發(fā)創(chuàng)建專門分支稼稿。
在特性分支合并進(jìn)master后,并不意味著代碼就能進(jìn)行發(fā)布讳窟,可能需要經(jīng)過(guò)各種測(cè)試修改让歼,這時(shí)需要再創(chuàng)建一個(gè)分支來(lái)完成這個(gè)步驟,它應(yīng)介于master與特性分支之間丽啡,我們可以把它叫做開(kāi)發(fā)分支develop谋右。
另外,對(duì)于線上發(fā)行版碌上,如果出現(xiàn)了緊急需要修復(fù)的bug,還需要一個(gè)分支hotfix來(lái)完成bug修復(fù)浦徊。
基于這些想法馏予,Vincent Driessen同學(xué)在多年前提出了一個(gè)分支模型A successful Git branching model,詳細(xì)描述了此種工作流盔性,后人大多把它叫做Git Flow霞丧。

A successful Git branching model

  • 主要分支
    • master: 永遠(yuǎn)處在production-ready狀態(tài)
    • develop: 最新的下次發(fā)布開(kāi)發(fā)狀態(tài)
  • 支援性分支
    • feature branches: 開(kāi)發(fā)新功能都從develop分支出來(lái),完成后merge回develop
    • release branches: 準(zhǔn)備要release的版本冕香,只修bugs蛹尝。從develop分支出來(lái),完成后merge回master和develop
    • hotfix branches: 等不及release版本必須馬上修復(fù)線上的問(wèn)題悉尾。從master分支出來(lái)突那,完成后merge回master和develop

概略來(lái)講,就是開(kāi)發(fā)工作在develop分支進(jìn)行构眯,然后提交到release分支愕难,最后合并到master分支。
git工作流很標(biāo)準(zhǔn)但是使用很復(fù)雜。

Github Flow

GitHub Flow是github.com提出的方案猫缭,簡(jiǎn)化成只有一個(gè)feature分支和一個(gè)master分支葱弟。
github有一個(gè)pull request功能,多人協(xié)作時(shí)猜丹,在feature分支開(kāi)發(fā)完成后芝加,可以向項(xiàng)目負(fù)責(zé)人發(fā)起pull request,請(qǐng)求項(xiàng)目負(fù)責(zé)人拉取代碼射窒,檢閱并合并pull request指定的分支藏杖。

Gitlab Flow

Gitlab Flow是gitlab.com提出的方案,覺(jué)得git flow太復(fù)雜轮洋,而github flow又過(guò)于簡(jiǎn)化而不能滿足項(xiàng)目開(kāi)發(fā)需求制市。
它的feature分支可以直接合入master分支,而master就變成了開(kāi)發(fā)主分支弊予。對(duì)于持續(xù)集成需求祥楣,提出從master開(kāi)出pre-production分支和production分支,pre-production作為一個(gè)發(fā)布前的緩存汉柒,而production就代表了線上運(yùn)行的版本误褪。

Gitlab Flow 環(huán)境分支

你可能會(huì)奇怪它為什么有一個(gè)發(fā)布前緩存,這個(gè)看實(shí)際應(yīng)用情景可選碾褂。比如iOS應(yīng)用的發(fā)布兽间,有一個(gè)蘋果審核階段,這個(gè)階段的代碼版本就是預(yù)發(fā)版本正塌,可放在pre-production中嘀略,待審核通過(guò),代碼不再修改時(shí)乓诽,就隨著應(yīng)用的真正發(fā)布而同步到production分支帜羊。以后當(dāng)我們需要追溯歷史發(fā)布版本時(shí),只需要查看production分支就可以了鸠天。

同樣gitlab也有像github一樣的pull request讼育,不過(guò)在gitlab中,這個(gè)功能叫做merge request稠集,也是請(qǐng)求別人來(lái)拉取我的分支代碼奶段,code review,然后合并剥纷。

一些小Tips

  • 空目錄在Git中是個(gè)無(wú)關(guān)對(duì)象痹籍,它不能通過(guò)add命令被添加到提交中。如果需要把空目錄提交并push到遠(yuǎn)程倉(cāng)庫(kù)晦鞋,可以在目錄下建一個(gè)無(wú)關(guān)文件.gitkeep词裤。
  • 特性分支上的提交如果是比較隨意的話刺洒,它在合入主開(kāi)發(fā)分支時(shí)應(yīng)壓縮一下提交歷史,再比較正式地的提交一次吼砂。這時(shí)可用到squash命令逆航,同時(shí)它可以作為merge的選項(xiàng)git merge --squash branch,這樣的合并不會(huì)產(chǎn)生新提交渔肩,需要你在解決完沖突后因俐,自己提交一次。

參考閱讀

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末周偎,一起剝皮案震驚了整個(gè)濱河市抹剩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蓉坎,老刑警劉巖澳眷,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拴疤,死亡現(xiàn)場(chǎng)離奇詭異单刁,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)大莫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門勿侯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拓瞪,“玉大人,你說(shuō)我怎么就攤上這事助琐〖拦。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵兵钮,是天一觀的道長(zhǎng)蛆橡。 經(jīng)常有香客問(wèn)我,道長(zhǎng)掘譬,這世上最難降的妖魔是什么泰演? 我笑而不...
    開(kāi)封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮屁药,結(jié)果婚禮上粥血,老公的妹妹穿的比我還像新娘柏锄。我一直安慰自己酿箭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布趾娃。 她就那樣靜靜地躺著缭嫡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抬闷。 梳的紋絲不亂的頭發(fā)上妇蛀,一...
    開(kāi)封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天耕突,我揣著相機(jī)與錄音,去河邊找鬼评架。 笑死眷茁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的纵诞。 我是一名探鬼主播上祈,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼浙芙!你這毒婦竟也來(lái)了登刺?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嗡呼,失蹤者是張志新(化名)和其女友劉穎纸俭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體南窗,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡揍很,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矾瘾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片女轿。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖壕翩,靈堂內(nèi)的尸體忽然破棺而出蛉迹,到底是詐尸還是另有隱情,我是刑警寧澤放妈,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布北救,位于F島的核電站,受9級(jí)特大地震影響芜抒,放射性物質(zhì)發(fā)生泄漏珍策。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一宅倒、第九天 我趴在偏房一處隱蔽的房頂上張望攘宙。 院中可真熱鬧,春花似錦拐迁、人聲如沸蹭劈。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)铺韧。三九已至,卻和暖如春缓淹,著一層夾襖步出監(jiān)牢的瞬間哈打,已是汗流浹背塔逃。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留料仗,地道東北人湾盗。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像立轧,于是被迫代替她去往敵國(guó)和親淹仑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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