目前世界上大部分公司都使用Git來控制軟件開發的版本,那么我們用Git到底該建多少個分支呢?2010年Vincent Driessen在《A successful Git branching model》一文中提出了一個GitFlow的工作流程模型。

核心分支
在GitFlow方案中,最核心的分支有兩個:主分支(Master)分支和開發(Develop)分支。當Develop分支的源碼到達了一個可以發布的穩定狀態時,所有的代碼變更需要合并到Master分支上,然后標記一個版本號。

Master分支和Develop分支
除了核心分支,GitFlow模型還提出了幾種輔助性分支,包括功能(Feature)分支、發布(Release)分支、熱修復(HotFix)分支。

Feature分支要合并到Develop分支
功能分支是為將來要發布的版本開發新的功能,只要這個功能處于開發狀態,這個分支就會存在,最終會合并到Develop分支,或者被取消(比如產品經理改變了主意)。

Release分支從Develop分支創建,最終合并到Develop分支和Master分支
Release分支是從Develop分支創建,是為新產品的發布做準備的,將即將發布的功能打包在這個分支。打完Release分支之后,可以在這個Release分支上測試及修改Bug。最后Release分支要合并到Develop和Master分支上。

Hotfix分支從Master分支創建,再合并到Master分支和Develop分支
熱修復分支基于Master分支創建,一般用于線上bug的緊急修復。開發完后需要合并回Master和Develop分支。
不過GitFlow這個模型已經提出了10多年,當時的軟件開發環境和現在大不相同,Vincent Driessen也意識到了這一點,在2020年他說世界上沒有萬能藥存在,無論選擇哪種流程,需要考慮自己的情況。
If, however, you are building software that is explicitly versioned, or if you need to support multiple versions of your software in the wild, then git-flow may still be as good of a fit to your team as it has been to people in the last 10 years. In that case, please read on.
To conclude, always remember that panaceas don't exist. Consider your own context. Don't be hating. Decide for yourself.
Vincent Driessen,March 5, 2020.
GitFlow模型相對比較復雜,比較適合需要同時維護多個版本的情況,不太適用于現在的互聯網開發。Github Flow流程就非常簡單。

Github Flow
我自己團隊的情況是這樣的:除了開發環境以外,還有測試環境、預生產環境和生產環境。Develop分支對應的是測試環境,Release分支對應的是預生產環境,Master分支對應的是生產環境。Release分支的代碼基本不會修改,主要是為了觸發在預生產環境的自動化部署流程而設的。
我們正常的發布流程是:測試環境 -> 預生產環境 -> 生產環境。如果遇到線上緊急問題需要修復,那么就從Master分支上拉下代碼緊急修復,線上問題處理好了,再合并到Develop分支上,相當于GitFlow模型中的HotFix分支。
總之,無論選擇怎樣的Git流程,適合自己的才是最好的。
我會持續更新關于物聯網、云原生以及數字科技方面的文章,用簡單的語言描述復雜的技術,也會偶爾發表一下對IT產業的看法,歡迎大家關注,謝謝。