git分支管理和工做流規範:具體規範

前一篇介紹了 git相關的概念,咱們能夠查看文件的狀態,在各個狀態之間進行切換,能夠建立和合並分支,經過rebase還能夠整理本身的提交歷史。經過這些命令和操做,就可完成工做流規範規定的操做流程了。git

本篇介紹具體的規範,包括分支的劃分和命名規範,不一樣類型的分支應對不一樣的場景,而後會介紹下工做流工具git-flow,如何簡化咱們的操做。服務器

分支構成

master和develop分支一直存在,且名稱不會變化,通常不直接修改這2個分支,由其餘分支合併而來。session

feature、release、hotfix分別用於功能點開發、優化,特定版本測試,線上問題緊急處理,同一類型的分支會產生多個。分佈式

分支劃分以下:工具

  • master:與線上版本保持絕對一致;
  • develop:開發分支,由下文提到的release、feature、hotfix分支合併事後的代碼;
  • feature:實際功能點開發分支,建議每一個功能新建一個feature, 具備關聯關係的功能公用一個feature分支;
  • release:每一次開發完成以後,從develop建立出來的分支,以此分支爲基準,進行測試;
  • hotfix:該分支主要用於修復線上bug;

命名規範約定以下:post

  • feature分支命名:feature/name
  • release分支命名:release/name
  • hotfix分支命名:hotfix/name

好比有一個「優化分佈式Session」的需求,可在develop分支的基礎上建立新分支 feature/optimize_distributed_session進行開發,開發完成後合併到develop分支。測試

分支詳細介紹和處理流程

master分支

主分支,與線上運行的版本始終保持一致,任什麼時候候都不要直接修改master分支。優化

一個版本的release分支、hotfix分支開發完成後,會合並代碼到master分支,也就是說master分支主要來源於release分支和hotfix分支。命令行

develop分支

開發分支,始終保持最新完成以及bug修復後的代碼,新增功能時基於該分支建立feature分支。cdn

一個版本的release分支、hotfix分支開發完成後,也會合併到develop分支,另外,一個版本的feature功能開發完成後,也會合併到develop分支。也就是說develop分支來源於feature、release、hotfix分支。

feature分支

開發新功能或優化現有功能時,會建立feature分支,以develop爲基礎建立。通常會有多個功能同時開發,但上線時間可能不一樣,在適當的時候將特定的feature分支合併到develop分支,並建立release分支,進入測試狀態。

release分支

當一組feature開發完成,會首先合併到develop分支,開始進入提測階段時,會建立release分支。

以release分支代碼爲基準提測,測試過程當中若存在bug須要修復,則直接由開發者在release分支修復並提交。

測試完成以後,合併release分支到master和develop分支,此時master爲最新代碼,用做上線。

hotfix分支

線上出現緊急問題時,須要及時修復,以master分支爲基線,建立hotfix分支,修復完成後,須要合併到master分支和develop分支。

特殊狀況處理和注意點

develop分支已存在未上線的feature代碼, 此時須要緊急上線一個新功能, 但develop的代碼不能上,如何處理 ?

  • 以master爲基線建立feature, 在完成以後,代碼合併到master分支;
  • 爲了保證develop是最新代碼,須要從master合併到develop分支;

以develop爲基線,建立了f1和f2兩個feature分支以後, f1,f2開發一半的時候,發現兩個分支代碼須要有依賴怎麼辦 ?

  • 最好在開發開始前肯定兩個功能是否相關,若相關則只建立一個分支,兩個功能在一塊兒開發;
  • 若是已經建立,則須要合併到一個分支;

必定要保證commit歷史記錄的整潔,代碼合併時,根據狀況選擇merge或rebase;

使用rebase注意,一旦分支中的提交對象發佈到公共倉庫,就千萬不要對該分支進行衍合操做;

提交說明規範:

  • 提交說明最好限制在一行之內,50個字符如下,簡明扼要地描述更新內容,空開一行後,再展開詳細註解;
  • 若是關聯jira,寫上jira地址;

git-flow工做流

git-flow工具

上面的流程在第一次接觸時,會以爲有點複雜,經過git-flow工具能夠把這些流程自動化。它是一個命令行工具,支持各個平臺,好比OSX、Linux、Windows等支持。

初始化

經過 git flow init 命令進行初始化,以交互式的方式進行,主要是約定分支的命名,建議使用默認值;

開發新功能

git flow feature start f1 添加新特性,這個操做建立了一個基於develop的特性分支,並切換到這個分支之下。

git flow feature finish f1 完成新特性,這個操做會合並f1分支到develop分支,並刪除特性分支,切換回develop分支。

git flow feature publish f1 發佈新分支,發佈新特性分支到遠程服務器,其它用戶也可使用這分支。

發佈版本

git flow release start r1 [BASE] 建立發佈版本,[BASE]是以哪一個分支或commit爲基礎進行發版,通常爲develop。

git flow release publish r1 發佈release分支,其餘同事就能夠看到這個分支,並修改一些小問題。

git flow release finish r1 完成release分支,會合並release分支到master分支,用release分支名打Tag,合併release分支到 develop分支,最後移除release分支。

修復線上問題

有可能須要修正 master 分支上某個 TAG 標記的生產版本。

git flow hotfix start VERSION [BASENAME] 建立hotfix分支,VERSION 參數標記着修正版本,[BASENAME]爲finish release時填寫的版本號。

git flow hotfix finish VERSION,當完成緊急修復分支,代碼合併到develop和 master分支。相應地,master分支打上修正版本的 TAG。

git flow命令

情情說
相關文章
相關標籤/搜索