Git分支管理規(guī)范構(gòu)思

最近對(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

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

相關(guān)閱讀更多精彩內(nèi)容

  • 所有使用了本規(guī)范的項(xiàng)目,必須嚴(yán)格規(guī)范操作,否則不予以合并代碼、提測、打包上線等后續(xù)操作。 branch使用規(guī)范 分...
    一瓶多先生閱讀 979評(píng)論 0 1
  • 轉(zhuǎn)載 GIT工作流簡介 功能驅(qū)動(dòng)開發(fā) "功能驅(qū)動(dòng)式開發(fā)"(Feature-driven development,簡...
    張志_koen_zhang閱讀 14,892評(píng)論 1 6
  • 良好的分支管理有利于整個(gè)項(xiàng)目的穩(wěn)步迭代與團(tuán)隊(duì)成員間的密切合作,故而本文將介紹一個(gè)成熟的git分支管理模型,用作實(shí)踐...
    Xzzzl閱讀 832評(píng)論 0 0
  • 1 GIT,在技術(shù)層面上,絕對(duì)是一個(gè)無中心的分布式版本控制系統(tǒng),但在管理層面上,我建議你保持一個(gè)中心版本庫。 2 ...
    聶順閱讀 881評(píng)論 0 1
  • 常設(shè)分支 master 分支 -- master 為主分支,也是用于部署生產(chǎn)環(huán)境的分支,確保master分支穩(wěn)定性...
    Kuco_Shen閱讀 1,695評(píng)論 0 2

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