分支策略

參考極客時(shí)間,持續(xù)交付36講

一切的源頭,代碼分支策略的選擇

采用不同的代碼分支策略,意味著實(shí)施不同的代碼集成與上線流程,這會(huì)影響整個(gè)研發(fā)團(tuán)隊(duì)每日的協(xié)作方式,因此研發(fā)團(tuán)隊(duì)通常會(huì)很認(rèn)真地選擇自己的策略。

主干開發(fā)

主干開發(fā)是一個(gè)源代碼控制的分支模型,開發(fā)者在一個(gè)稱為 “trunk” 的分支(Git 稱 master) 中對代碼進(jìn)行協(xié)作,除了發(fā)布分支外沒有其他開發(fā)分支。

大多數(shù)時(shí)候,發(fā)布分支是主干某個(gè)時(shí)點(diǎn)的快照。以后的改 Bug 和功能增強(qiáng),都是提交到主干,必要時(shí) cherry-pick (選擇部分變更集合并到其他分支)到發(fā)布分支。與主干長期并行的特性分支極為少見。為了保證主干上線后的有效性,一般會(huì)使用特性切換(feature toggle,灰度放量控制)。特性切換就像一個(gè)開關(guān)可以在運(yùn)行期間隱藏、啟用或禁用特定功能,項(xiàng)目團(tuán)隊(duì)可以借助這種方式加速開發(fā)過程。

特性切換在大型項(xiàng)目持續(xù)交付中變得越來越重要,因?yàn)樗兄趯⒉渴饛陌l(fā)布中解耦出來。特性切換會(huì)導(dǎo)致代碼更脆弱、更難測試、更難理解和維護(hù)、更難提供技術(shù)支持,而且更不安全。越來越多的特性切換會(huì)使得邏輯越來越混亂。

特性切換需要健壯的工程過程、可靠的技術(shù)設(shè)計(jì)和成熟的特性切換生命周期管理,如果不具備這三個(gè)關(guān)鍵的條件,使用特性切換反而會(huì)降低生產(chǎn)力。

優(yōu)點(diǎn):1、頻繁集成,每次集成沖突少,集成效率高 2、享受持續(xù)交付帶來的好處 3、無需在分支間切換

缺點(diǎn):1、太多人工作在主干上,bug代碼是災(zāi)難 2、借助特性切換保證線上運(yùn)行正確性,引入新問題

特性分支開發(fā)

git flow


git flow

線上部署使用master分支,develop分支用來集成,feature分支用來開發(fā)。

github flow

GitHub Flow 是 GitHub 所使用的一種簡單流程。該流程只使用 master 和特性分支,并借助 GitHub 的 pull request 功能。

在 GitHub Flow 中,master 分支中包含穩(wěn)定的代碼,它已經(jīng)或即將被部署到生產(chǎn)環(huán)境。任何開發(fā)人員都不允許把未測試或未審查的代碼直接提交到 master 分支。對代碼的任何修改,包括 Bug 修復(fù)、熱修復(fù)、新功能開發(fā)等都在單獨(dú)的分支中進(jìn)行。不管是一行代碼的小改動(dòng),還是需要幾個(gè)星期開發(fā)的新功能,都采用同樣的方式來管理。

當(dāng)需要修改時(shí),從 master 分支創(chuàng)建一個(gè)新的分支,所有相關(guān)的代碼修改都在新分支中進(jìn)行。開發(fā)人員可以自由地提交代碼和提交到遠(yuǎn)程倉庫。當(dāng)新分支中的代碼全部完成之后,通過 GitHub 提交一個(gè)新的 pull request。團(tuán)隊(duì)中的其他人員會(huì)對代碼進(jìn)行審查,提出相關(guān)的修改意見。由持續(xù)集成服務(wù)器(如 Jenkins)對新分支進(jìn)行自動(dòng)化測試。當(dāng)代碼通過自動(dòng)化測試和代碼審查之后,該分支的代碼被合并到 master 分支。再從 master 分支部署到生產(chǎn)環(huán)境。GitHub Flow 的好處在于非常簡單實(shí)用,開發(fā)人員需要注意的事項(xiàng)非常少,很容易形成習(xí)慣。當(dāng)需要修改時(shí),只要從 master 分支創(chuàng)建新分支,完成之后通過 pull request 和相關(guān)的代碼審查,合并回 master 分支就可以了。

GitLab Flow

GitLab Flow 針對不同的發(fā)布場景,在 GitHub Flow(特性分支加 master 分支)的基礎(chǔ)上做了改良,額外衍生出了三個(gè)子類模型。

1、帶生產(chǎn)分支。無法控制準(zhǔn)確的發(fā)布時(shí)間,又要不停集成。2創(chuàng)建一個(gè)production分支方式發(fā)布代碼

2、帶環(huán)境分支。要求所有代碼都在逐個(gè)環(huán)境中測試通過,為不同環(huán)境創(chuàng)建不同分支

3、帶發(fā)布分支。用戶對外界發(fā)布軟件的項(xiàng)目,同時(shí)需要維護(hù)多個(gè)發(fā)布版本(android發(fā)版),盡可能晚從master拉取發(fā)布分支,bug修改先提交到master,cherr-pick到release分支

分支開發(fā)的的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):1、不同功能在獨(dú)立分支開發(fā),消除了功能穩(wěn)定前彼此干擾的問題 2、容易保證主干分支的質(zhì)量,只要不把沒有開發(fā)的特征分支合并入主干分支,主干分支就不會(huì)有問題的功能

缺點(diǎn):1、不及時(shí)merge,特性分支合并到主干分支會(huì)比較麻煩 2、如果做CI/CD,需要對不同分支配備不同的構(gòu)建環(huán)境

選擇分支策略


不同情況適用的代碼分支策略
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容