Git Branching Model
TL;DR 模型的選擇並非絕對,你也可以用其中一種模型用到底,只是在使用上就不會這麼順暢。你可以在迭代快速的 Web 服務使用略為繁瑣的 Git Flow 也可以在需要同時支援多個版本服務的專案上使用 GitHub Flow 只是你會發現你會越用越受到流程的限制,最後要不就是放棄既有流程,不然就弄出一個屬於自己的流程(但我覺得這不見得是壞事,只是需要多一點團隊教育成本),在選用分支模型前還要先看看你們服務的上版節奏以及是否需要同時支援不同版本的情況。 Why Branching Model Matter 通常會需要考量用什麼分支模型基本上都是有協作的需求,開發的人不是只有一到兩個人,才會需要有一個大家都知道的開分支後合併的方式,才不會亂成一鍋粥。也可以在 release 時清楚的知道要從那一個 commit 出一個 artifact。 分支模型不只跟開發團隊如何協作有關,也關乎到團隊是如何做發布。近年很多在討論 DevOps 相關的場合裡滿多都在討論工具要怎麼使用,也有滿多篇幅討論怎麼做 CI/CD ,甚至是部屬時要用什麼樣的策略,金絲雀部屬、藍綠部屬等。不過卻滿少連帶討論到團隊的分支模型是怎麼選擇的。因為模型的選擇也跟團隊的部屬節奏有關連,若發布新版本的節奏很快的話(一週內就一個甚至多個新的版本推上去)甚至可以不需要 hotfix branch 的存在,但若是節奏很不穩定的話或是偏長(數週甚至數月一個版本)那 hotfix 就需要特別考量在分支模型裡面。以下就以常見的分支模型來分別探討他們適合用在哪些情境。 GIT FLOW ref: https://nvie.com/posts/a-successful-git-branching-model/ 這算是很早期提出來的分支模型。分支數量算是最多的一種,所以線圖也算是相對不需要做什麼動作就顯的複雜的一種。雖然這個模型相對麻煩,操作也相對繁瑣,但是因為發展最久大家也算是相對熟悉的模式,甚至還有 CLI 工具與 GUI 工具支援這個模型的操作。 這個模式還滿適合發布頻率較為穩定的服務,也能很好的符合稽查相關的需求,另外就是有特別切出 release branch 的關係,需要同時支援多個版版時,會比較容易一些。 分支是常見的模型中最多的,因此操作步驟相對最複雜,也滿吃團隊成員對於 git 的操作(當然是有工具可以減輕負擔跟知識要求,但出問題時的修復比較麻煩)。但需要注意的是,當同時開發的 feature branch 變多的時候管理會顯的相對不容易。 GITHUB FLOW ref: https://github.com/skills/release-based-workflow 這個模式基本上是以 branch 為主的極簡化版本,捨去了 release branch, hotfix branch 和只為了發布時下 tag 使用的 master branch。保留了 main branch 同時兼具開發時為基底的需求,同時也是 release 時下 tag 的目標 branch。同樣在開發功能時會切出一個 feature branch 做管理。 ...