- Git Flow 是什麼
Git Flow是建構在Git之上的一個組織軟體開發活動的模型,是在Git之上建構的一項軟體開發最佳實踐。
Git Flow是一套使用Git進行源代碼管理時的一套行為規範,可實作了軟體開發過程不同操作的互相隔離。這種軟體開發的活動模型被稱為“Git Flow”。
Git Flow

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開發模型讓開發代碼倉庫保持整潔,讓小組各個成員之間的開發互相隔離,能夠有效避免處于開發狀态中的代碼互相影響而導緻的效率低下和混亂。