Git flow 分支管理規範

1. 概要

master分支(DevOps Permission)

  • 常駐分支也是穩定分支,是生產環境中最新代碼
  • 因爲灰度環境是模擬的生成環境,部署的也是master分支
  • 發佈完成後,對每一個版本進行tag
  • 不容許直接提交代碼,只接受merge request

develop分支(Tech Lead Permission)

  • 常駐分支,是開發環境中最新代碼
  • 不容許直接提交代碼,只接受merge request
  • 該分支僅能merge當前版本要發佈的feature及bug fixed

release分支(Test Team Focus)

  • 臨時分支,也稱測試分支,命名規則依賴於發佈的版本號
  • release分支包含的內容爲本次待發布的功能需求、改進優化或bug fixed
  • 生命週期從提測開始,bug修復到該版本發佈以前爲止
  • QA驗證完畢,將該版本的release分支merge到master分支和develop分支
  • 測試階段的bug fixed可在該release分支進行操做,不須要再切分支了
  • 該分支爲待發布的封版代碼,只容許bug fixed,不能提交無關代碼,如代碼優化等,如需必要優化及變動,請和產品測試達成一致。

feature分支(Dev Team Focus)

  • 功能分支也是臨時分支,該分支須要關聯到具體的JIRA號
  • 該功能分支當且僅當是一個feature的開發或一個bug fixed
  • 生命週期最短,顆粒度也比較小

2. 功能分支

checkout規則

從develop分支checkout待開發的功能分支,每一個功能分支,須要關聯到JIRA面板的一個任務即JIRA號,如上圖所示,面板中BKWALLET-434,則對應分支爲feat-434。git

注意:測試

  • 因爲每一個功能分支依賴於具體的JIRA中的任務,須要將JIRA中任務進行拆分,拆分的粒度要須要Tech lead來操做,保證子任務在開發階段的可執行性
  • 目前Feature分支的代碼提交,會強制觸發填寫對應的JIRA號

merge request規則

將開發完畢的分支,拉取develop最新代碼,merge並解決衝突後,以後在對應的feature分支建立並提交到develop分支,並自動觸發merge request請求,由code review group進行代碼審查。fetch

注意:優化

  • 代碼提交註釋包含需求、改動點、JIRA號、注意事項等
  • 每一個merge request不要包含不相關的功能
  • merge request提交後須要及時跟蹤動態,包括經過、打回等
  • 該功能進入提測流程後,需刪除以前的功能分支

3. 維護分支

當線上版本出現問題,須要從master分支checkout出hotfix分支,代碼修復完畢,而且QA驗證經過後,將該分支merge request到master和develop分支。ui

其中master分支的merge request須要admin來審批,admin能夠是tech leader或devops,由項目組的實際狀況來決定。spa

4. 命名規則

目前公司sprint迭代週期爲兩週,每一個迭代週期內會有屢次版本發佈,內部版本號以M(milestone)序列開頭,好比M五、M六、M7等;每一個內部版本週期內也會存在屢次小版本的迭代的狀況。3d

Tag標籤(Required)

每一次merge到master分支產生的變動,都須要進行tag,相比只用commit號來講,更容易追蹤歷史版本,有利於後期維護。針對不一樣項目特性、建議命名以下:code

Backend(Java/PHP)/Frontend(Web)生命週期

tag命名方式建議方式爲<內部版本號/子版本號>,子版本號能夠爲發佈日期或臨時版本號等形式,可由各組自行調整,好比M5/v1.1.0、M5/v1.2.0、M5/20181219等。開發

對於Hotfix的狀況,tag標籤命名方式,能夠根據待修復的版本號+1,好比從tag爲M5/v1.2.0,則修復後的tag爲M5/v1.2.1。

 

Android/iOS

業務APP/對接業務SDK(好比錢包收銀臺SDK)的tag命名與發佈版本號保持一致,好比v2.9.0;

業務組件的tag命名方式爲內部版本號,可根據實際狀況調整。

注意:移動端的版本發佈會存在cross多個內部版本狀況,所以,不須要指定內部版本號做爲前綴形式。

release分支(Optional)

臨時分支,命名規則建議與tag方式一致,也能夠根據實際狀況自行調整。

該分支完成發佈後,將該分支刪除。

feature分支(Optional)

臨時分支,命名規則建議與JIRA號一致,也能夠根據實際狀況自行調整。

該分支merge到develop分支後或提測以前,將該分支刪除。

hotfix分支(Optional)

臨時分支,應用範圍對於線上出現bug,須要緊急修復的狀況,命名規則建議參考tag分支,不強制要求,能夠根據狀況自行調整。

該分支merge到master分支後,將該分支刪除。

5. 經常使用Git命令

切換分支(分支名)

git checkout develop

建立local分支(分支名爲feat-BKWALLET-233)

git checkout -b feat-BKWALLET-233

建立remote分支(分支名爲feat-BKWALLET-233)

git push origin feat-BKWALLET-233

拉取remote分支到local(分支名爲develop)

git pull origin develop

提交local changes到remote(分支名爲develop)

git push origin develop

合併分支(develop分支merge功能分支 feat-BKWALLET-233)

git checkout develop // 切換

git merge feat-BKWALLET-233 // 合併

注意:確保當前分支爲要合併分支,好比develop分支

刪除remote分支(分支名爲feat-BKWALLET-233)

git push origin :feat-BKWALLET-233

刪除local分支(分支名爲feat-BKWALLET-233)

git branch -D feat-BKWALLET-233

查看所有分支

git branch -a

將remote的新分支或新tag信息同步到local

git fetch --all

建立local tag(建立tag爲M5/v1.2.0,同時要增長註釋)

當前commit號打tag標籤:

  • 無註釋:git tag -a M5/v1.2.0
  • 有註釋:git tag -a M5/v1.2.0 -m "M5的v1.2.0版本發佈"

補打tag標籤(指定commit號爲 9fbc3d0):

git tag -a M5/v1.2.0  9fbc3d0

 

注意:

建立tag標籤,根據命名方式能夠對應到版本號及發佈功能,所以,註釋上不作強制,根據實際狀況是否追加註釋。

建立remote tag

git push origin M5/v1.2.0

從remote tag切換分支(hotfix分支爲hotfix-1.2.0)

git fetch --all  // sync first

git checkout tags/M5/v1.2.0 -b hotfix-1.2.0

相關文章
相關標籤/搜索