最近對(duì)于公司項(xiàng)目源碼分支管理有一些規(guī)范構(gòu)思,對(duì)于同一個(gè)項(xiàng)目而言,不同環(huán)境的源碼管理、自動(dòng)化部署方式、以及接口數(shù)據(jù)隔離等我們是否可以滿足現(xiàn)狀?
對(duì)于基礎(chǔ)項(xiàng)目源碼分支而言,一般有develop、master兩個(gè),develop來研發(fā)功能并測試沒有問題后合并到master再發(fā)布到生產(chǎn)環(huán)境。
分支示意圖

特性分支(feature)
如果項(xiàng)目比較大,協(xié)同人員比較多,每個(gè)研發(fā)人員的分工比較明確,針對(duì)這種情況我們?nèi)绻€是簡單的使用develop/master兩個(gè)分支就不太能滿足需求了,針對(duì)這個(gè)情況我們?nèi)绾稳ヒ?guī)范化管理呢?
特性分支一般是基于develop開發(fā)分支衍生創(chuàng)建的,而且是本地分支(Local Branches),不太建議一個(gè)特性任務(wù)多個(gè)人同時(shí)使用,如果必須是多人協(xié)同的任務(wù),那么該特性分支則會(huì)變成遠(yuǎn)程分支(Remote Branches),特性分支的任務(wù)完成后需要合并到develop分支并后續(xù)提交給測試人員進(jìn)行測試。
任務(wù)分配到具體研發(fā)人員后,研發(fā)人員可以在本地創(chuàng)建特性分支,如果分支較多為了區(qū)分方便,我們可以定義一個(gè)分支名稱的前綴,如:feature-,如果給我分配了用戶管理的任務(wù),那么我就可以在本地創(chuàng)建feature-user特性分支來研發(fā)。
緊急缺陷修復(fù)分支(bugfix)
如果代碼已經(jīng)發(fā)布,在運(yùn)行過程中遇到了一個(gè)緊急的缺陷,針對(duì)這個(gè)缺陷我們需要怎么去修復(fù)呢?
首先我們需要基于master分支來衍生創(chuàng)建缺陷修復(fù)分支,該分支也應(yīng)該是本地分支(Local Branches)不應(yīng)該被推送到遠(yuǎn)程目標(biāo)倉庫,我們可以以bugfix-作為缺陷修復(fù)分支的前綴,如:bugfix-register-error。
缺陷一旦修復(fù)完成后需要將bugfix-xxx分支的代碼變動(dòng)合并到master以及develop:
-
為什么合并到develop?遇到的缺陷不僅是
master分支存在,因?yàn)?code>master分支的代碼是從develop合并而來的,所以我們需要同步合并到develop防止后續(xù)發(fā)版再次出現(xiàn)相同的問題。 -
為什么合并到master?因?yàn)樵撊毕菔巧a(chǎn)環(huán)境發(fā)現(xiàn)的,雖然我們合并到了
develop分支,但是不保證距下次發(fā)版生產(chǎn)環(huán)境不再出現(xiàn)緊急的缺陷所以我們需要將代碼合并到master。
下一個(gè)版本分支(next-version)
如果項(xiàng)目是有規(guī)劃根據(jù)迭代版本循序漸進(jìn)的,那么建議使用next-version分支,那么為什么這么做呢?
顧名思義,next-version是下一個(gè)版本,當(dāng)前版本源碼一般存放于develop分支,而且當(dāng)前版本是跟任務(wù)規(guī)劃來的,不會(huì)涉及next-version分支的源碼,這樣就做到了版本之間的源碼隔離,當(dāng)前版本準(zhǔn)備發(fā)布時(shí)防止發(fā)布下個(gè)版本未完成的功能。
next-version是基于develop分支衍生創(chuàng)建的,develop是當(dāng)前版本,那么next-version就是下一個(gè)當(dāng)前版本,develop一旦合并到master發(fā)布后就需要將next-version的代碼合并到develop作為當(dāng)前版本繼續(xù)做后續(xù)研發(fā)。
支持自動(dòng)化部署的分支
自動(dòng)化部署可以極大的提高CI/CD效率,研發(fā)人員只需要關(guān)心業(yè)務(wù)功能怎么去實(shí)現(xiàn),無需考慮代碼怎么去部署,代碼一旦被提交就可以觸發(fā)自動(dòng)化部署的程序,實(shí)現(xiàn)流水線的自動(dòng)化部署業(yè)務(wù)。
開發(fā)環(huán)境自動(dòng)化部署可以考慮使用Drone來配置,它很輕量級(jí),在根目錄下創(chuàng)建一個(gè)名為.drone.yml的文件即可搞定配置流程,它還可以結(jié)合支持私有部署的Git源碼倉庫:Gitea 實(shí)現(xiàn)鉤子回調(diào),部署也很簡單使用docker部署一個(gè)管理端、一個(gè)運(yùn)行節(jié)點(diǎn)即可。
參與自動(dòng)化部署的分支一般為:develop、next-version。
master分支則是建議手動(dòng)觸發(fā)的方式來部署,可以使用Jenkins。
常見問題
-
功能還未研發(fā)完成,臨時(shí)接到緊急任務(wù),我怎么把未完成的工作保存并切換分支?
可以使用
git stash暫存工作空間的文件變動(dòng),暫存后就可以切換到其他分支做相關(guān)工作了,處理完成后返回未完成的分支執(zhí)行git stash pop恢復(fù)暫存即可,git stash還有很多用法,可以參考官網(wǎng)文檔:git-stash