Gitflow

Pivot發表於2018-06-29

參考:

一.分支簡述

Gitflow

  • 藍圓--主線(master)
  • 紫圓--主分支(dev)(生產主線)
  • 橙圓--新功能開發主線(feature)
  • 綠圓--新版本釋出線(release)
  • 紅圓--釋出版本bug修復線(hotfix)

二.工作流程

工作流基礎

Gitflow

專案負責人建立dev分支供團隊開發人員圍繞它進行相關操作

git branch dev
git push -u origin dev

複製程式碼

其他人clone,建立一個dev的軌跡版本

git clone git@github.orgXXXXXXXX
git checkout -b dev origin/dev

複製程式碼

dev這個分支將包含專案的完整歷史記錄,而master僅包含縮略版本。

新功能開發流程

1.新建feature分支

Gitflow

在dev基礎上建立新分支:

git checkout -b feature/demo dev

複製程式碼

推到遠端,(然後這部分新功能程式碼就提交到這個上)

git push

複製程式碼

所有開發此新功能的人員,都在這個分支上開發提交程式碼

git status
git add
git commit -m "Add some-file."

複製程式碼

2.完成新功能開發(合併feature分支到dev上去)

Gitflow

git pull origin dev
git checkout dev
git merge feature/demo
git push
git branch -d feature/demo

複製程式碼

注意

  • 新功能分支,永遠不要直接在master上合併,要在dev上進行操作
  • 合併時做好衝突合併(webstrom可實現自動合併)

3.測試環境釋出dev分支程式碼(提交測試)

線上版本釋出流程

(1)從dev中建立釋出的release分支

Gitflow

當主測試流程完成,原始碼已經趨於穩定,準備一個釋出版本(確立版本號),並推到遠端

git checkout -b release-1.0 dev
git push

複製程式碼

這個分支是清理準備釋出、 整體迴歸測試、 更新文件,和做其他任何系統即將釋出的事情。

(2)開發交程式碼改bug

(3)release分支合併到master和dev

Gitflow

一旦已經滿足釋出條件(或已經到了預定釋出日期),應該把release分支合併到master分支和dev分支中,然後,使用master釋出新版本。合併release分支到dev分支是很重要的,要讓release上修改的東西能在後續的開發分支中生效。

master

git checkout master
git merge release-1.0
git push

複製程式碼

dev

git checkout develop
git merge release-1.0
git push
git branch -d release-1.0

複製程式碼

(4)打標籤

Release分支在功能開發分支(dev)和公共釋出版(master)中,充當一個緩衝的作用。每當有原始碼合併到master中的時候,應該在master上打一個標籤,以便後續跟蹤查閱。

git tag -a 1.0.RELEASE -m "Initial public release" master
git push --tags

複製程式碼
線上bug修復過程

當使用者反饋系統有bug,需從master基礎上建立並維護hotfix新分支,解決完在合併回master

(1)建立hotfix

git checkout -b issue-#001 master

複製程式碼

(2)修復

(3)完成後合併到master釋出

Gitflow

git checkout master
git merge issue-#001
git push

複製程式碼

(4)打標籤

(5)合併到dev

git checkout develop
git merge issue-#001
git push


複製程式碼

三.小結

  • master僅包含縮略版本,dev包含專案完整歷史記錄
  • 新增新功能都在dev上新生成分支feature進行操作,然後在合併回dev上
  • 版本:在dev上測試流程完成,原始碼趨於穩定時,在dev上建立一個release作為釋出版本號(其實就是master和dev之間的一個緩衝)
  • 線上修bug:反饋出bug之後,在master基礎上新建一個分支hotfix,在該hotfix上修好了在合併回master,並同步到dev