Git flow工作流程

Git Flow 是什么

Git Flow是構建在Git之上的一個組織軟件開發活動的模型,是在Git之上構建的一項軟件開發最佳實踐。Git Flow是一套使用Git進行源代碼管理時的一套行為規范和簡化部分Git操作的工具。
  2010年5月,在一篇名為“一種成功的Git分支模型”的博文中,@nvie介紹了一種在Git之上的軟件開發模型。通過利用Git創建和管理分支的能力,為  每個分支設定具有特定的含義名稱,并將軟件生命周期中的各類活動歸并到不同的分支上。實現了軟件開發過程不同操作的相互隔離。這種軟件開發的活動模型被nwie稱為“Git Flow”。
  一般而言,軟件開發模型有常見的瀑布模型、迭代開發模型、以及最近出現的敏捷開發模型等不同的模型。每種模型有各自應用場景。Git Flow重點解決的是由于源代碼在開發過程中的各種沖突導致開發活動混亂的問題。因此,Git flow可以很好的于各種現有開發模型相結合使用。
在開始研究Git Flow的具體內容前,下面這張圖可以看到模型的全貌(引自nvie的博文):

Git Flow中的分支

Git Flow模型中定義了主分支和輔助分支兩類分支。其中主分支用于組織與軟件開發、部署相關的活動;輔助分支組織為了解決特定的問題而進行的各種開發活動。

主分支

主分支是所有開發活動的核心分支。所有的開發活動產生的輸出物最終都會反映到主分支的代碼中。主分支分為master分支和development分支。

master分支

master分支上存放的應該是隨時可供在生產環境中部署的代碼(Production Ready state)。當開發活動告一段落,產生了一份新的可供部署的代碼時,master分支上的代碼會被更新。同時,每一次更新,最好添加對應的版本號標簽(TAG)。

develop分支

develop分支是保存當前最新開發成果的分支。通常這個分支上的代碼也是可進行每日夜間發布的代碼(Nightly build)。因此這個分支有時也可以被稱作“integration branch”。
  當develop分支上的代碼已實現了軟件需求說明書中所有的功能,通過了所有的測試后,并且代碼已經足夠穩定時,就可以將所有的開發成果合并回master分支了。對于master分支上的新提交的代碼建議都打上一個新的版本號標簽(TAG),供后續代碼跟蹤使用。
  因此,每次將develop分支上的代碼合并回master分支時,我們都可以認為一個新的可供在生產環境中部署的版本就產生了。通常而言,“僅在發布新的可供部署的代碼時才更新master分支上的代碼”是推薦所有人都遵守的行為準則?;诖?,理論上說,每當有代碼提交到master分支時,我們可以使用Git Hook觸發軟件自動測試以及生產環境代碼的自動更新工作。這些自動化操作將有利于減少新代碼發布之后的一些事務性工作。

輔助分支

輔助分支是用于組織解決特定問題的各種軟件開發活動的分支。輔助分支主要用于組織軟件新功能的并行開發、簡化新功能開發代碼的跟蹤、輔助完成版本發布工作以及對生產代碼的缺陷進行緊急修復工作。這些分支與主分支不同,通常只會在有限的時間范圍內存在。

輔助分支包括:

  • 用于開發新功能時所使用的feature分支;

  • 用于輔助版本發布的release分支;

  • 用于修正生產代碼中的缺陷的hotfix分支。

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

feature分支

使用規范:

  • 可以從develop分支發起feature分支

  • 代碼必須合并回develop分支

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

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

release分支

使用規范:

  • 可以從develop分支派生

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

  • 分支命名慣例:release-*

release分支是為發布新的產品版本而設計的。在這個分支上的代碼允許做小的缺陷修正、準備發布版本所需的各項說明信息(版本號、發布時間、編譯時間等等)。通過在release分支上進行這些工作可以讓develop分支空閑出來以接受新的feature分支上的代碼提交,進入新的軟件開發迭代周期。
  當develop分支上的代碼已經包含了所有即將發布的版本中所計劃包含的軟件功能,并且已通過所有測試時,我們就可以考慮準備創建release分支了。而所有在當前即將發布的版本之外的業務需求一定要確保不能混到release分支之內(避免由此引入一些不可控的系統缺陷)。
  成功的派生了release分支,并被賦予版本號之后,develop分支就可以為“下一個版本”服務了。所謂的“下一個版本”是在當前即將發布的版本之后發布的版本。版本號的命名可以依據項目定義的版本號命名規則進行。

hotfix分支

使用規范:

  • 可以從master分支派生

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

  • 分支命名慣例:hotfix-*

除了是計劃外創建的以外,hotfix分支與release分支十分相似:都可以產生一個新的可供在生產環境部署的軟件版本。
當生產環境中的軟件遇到了異常情況或者發現了嚴重到必須立即修復的軟件缺陷的時候,就需要從master分支上指定的TAG版本派生hotfix分支來組織代碼的緊急修復工作。
  這樣做的顯而易見的好處是不會打斷正在進行的develop分支的開發工作,能夠讓團隊中負責新功能開發的人與負責代碼緊急修復的人并行的開展工作。

更進一步

Git Flow開發模型從源代碼管理角度對通常意義上的軟件開發活動進行了約束。應該說,為我們的軟件開發提供了一個可供參考的管理模型。Git Flow開發模型讓nvie的開發代碼倉庫保持整潔,讓小組各個成員之間的開發相互隔離,能夠有效避免處于開發狀態中的代碼相互影響而導致的效率低下和混亂。
  所謂模型,在不同的開發團隊,不同的文化,不同的項目背景情況下都有可能需要進行適當的裁剪或擴充。祝各位好運!
PS:為了簡化使用Git Flow模型時Git指令的復雜性,nvie開發出了一套 git增強指令集。可以運行于Windows、Linux、Unix和Mac操作系統之下。有興趣的同學可以去看看。

參考資料

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容

  • 引言 編寫的目的 -通過規范化的流程,使得產品、開發與測試等各個部門更高效的協同工作。-通過規范化的流程使得產品高...
    一憶閱讀 34,960評論 12 87
  • 寫在前面:在網上能夠看到很多的關于git flow 工作流程的博客或者文章,我將我的工作中的git flow的管理...
    楊小強閱讀 1,770評論 0 3
  • 本文參考a-successful-git-branching-model Git flow是基于git之上的一種軟...
    同桌的桌閱讀 7,401評論 0 3
  • 今夜夏風沉醉 我如是一只海上漂的小舟 這兒的風是不是偷了冬夜的瓊汁玉露 怎能如此清爽怡人 像母親溫柔的雙手輕拂 像...
    野派閱讀 191評論 0 1
  • 2010年的港劇《讀心神探》中有這樣一個案子:主人公姚學琛的舊友美詩是一個記憶大師,因為一些特殊的事情,與合伙人兼...
    碎碎念的又又閱讀 657評論 2 8