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

核心分支
在GitFlow方案中,最核心的分支有兩個(gè):主分支(Master)分支和開發(fā)(Develop)分支。當(dāng)Develop分支的源碼到達(dá)了一個(gè)可以發(fā)布的穩(wěn)定狀態(tài)時(shí),所有的代碼變更需要合并到Master分支上,然后標(biāo)記一個(gè)版本號(hào)。

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

Feature分支要合并到Develop分支
功能分支是為將來要發(fā)布的版本開發(fā)新的功能,只要這個(gè)功能處于開發(fā)狀態(tài),這個(gè)分支就會(huì)存在,最終會(huì)合并到Develop分支,或者被取消(比如產(chǎn)品經(jīng)理改變了主意)。

Release分支從Develop分支創(chuàng)建,最終合并到Develop分支和Master分支
Release分支是從Develop分支創(chuàng)建,是為新產(chǎn)品的發(fā)布做準(zhǔn)備的,將即將發(fā)布的功能打包在這個(gè)分支。打完Release分支之后,可以在這個(gè)Release分支上測(cè)試及修改Bug。最后Release分支要合并到Develop和Master分支上。

Hotfix分支從Master分支創(chuàng)建,再合并到Master分支和Develop分支
熱修復(fù)分支基于Master分支創(chuàng)建,一般用于線上bug的緊急修復(fù)。開發(fā)完后需要合并回Master和Develop分支。
不過GitFlow這個(gè)模型已經(jīng)提出了10多年,當(dāng)時(shí)的軟件開發(fā)環(huán)境和現(xiàn)在大不相同,Vincent Driessen也意識(shí)到了這一點(diǎn),在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模型相對(duì)比較復(fù)雜,比較適合需要同時(shí)維護(hù)多個(gè)版本的情況,不太適用于現(xiàn)在的互聯(lián)網(wǎng)開發(fā)。Github Flow流程就非常簡(jiǎn)單。

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