GitFlow總結

集中式工作流

集中式工作流所有開發功能都在一個分支上進行。

弊端:feature代碼缺乏隔離,每個人開發的功能混合在一起,互相牽制。

功能分支工作流

功能分支工作流以集中式工作流為基礎,不同的是為各個新功能分配一個專門的分支來開發。

弊端: 分支爆炸,難以管理,沒人知道每個分支的狀態。

GitFlow

為不同的分支分配一個很明確的角色,並定義分支之間如何和什麼時候進行交互。多個功能同時開發,在release時可以選擇型交付已經開發好的功能。

採用了功能分支的工作方式,同時又避免了大量分支難以管理的問題。

開發過程中開發功能相互不影響,功能沒開發完也不會影響版本發佈。大一些的需求可以在feature上開發,可以跨幾個版本發佈,比如一個大需求要開發3個月,不會導致主幹必須等3個月,可以提前投入開發,開發完了就合併到dev即可。

弊端:增加了管理成本,學習成本非常高,十分容易出錯。

GitFlow總結

GitFlow將分支分為五個角色:

  • master : 記錄所有Tag。
  • develop :主分支,包含所有提交。
  • feature :功能分支開發。
  • release :為發版本做準備。
  • hotfix :緊急修復上線產品的bug。

分支詳解

master分支

master分支上存放的應該是隨時可供在生產環境中部署的代碼。 當開發產生了一份新的可供部署的代碼時,master分支上的代碼會被更新。同時,每一次更新,添加對應的版本號標籤(TAG)。

注意:永遠不要在 master 分支上直接開發和提交代碼,以確保 master 上的代碼一直可用 。

develop分支

用作平時開發的主分支,並一直存在,永遠是功能最新最全的分支。 feature,release分支都是基於develop分支建立的。feature,release,hotfix分支最終都要合併到該分支,保證該分支擁有最全的代碼。

注意:需要為分支建立Daily Build。

feature分支

用於開發新功能。基於develop分支建立。如果該分支需要多人協作,那麼需要將該分支push到遠程,否則保留在本地即可。功能開發完成之後要合併到develop,並且將該分支進行刪除,防止分支爆炸。

release分支

用於發佈準備的專門分支。當開發進行到一定程度,不再進行新功能開發,要發版本的時候建立該分支並且指定版本號。該分支將用來測試以及改bug。 release 分支上的代碼要合併到master 分支和 develop 分支。合併到master分支要打tag。

注意:需要為這個分支單獨建立Jekins Build。但是該分支也不是永久存在的,開發完成就要將其刪掉。

hotfix分支

用於修復線上代碼的bug。基於master 分支建立,完成之後打上 tag 合併到 master 和develop 分支。

注意:需要為這個分支單獨建立Jekins Build。但是該分支也不是永久存在的,開發完成就要將其刪掉。

注意事項:

  • 所有feature分支基於develop 分支建立。
  • 所有hotfix 分支基於 master 建立。
  • 所有在 master 上的提交都必要要有 tag,方便回滾。
  • hotfix分支和release分支必須合併到master和develop兩個分支上面。
  • master和develp屬於主要分支,永遠保留。
  • hotfix,release,feature屬於輔助分支,臨時存在,使用完則在本地以及遠程進行刪除。
  • 在master上面打tag,一定要push到遠程。
  • merge代碼之後,一定要記得push到遠程。

Git 基本命令操作GitFlow

所有的操作總結起來就是建立分支,合併分支,刪除分支,打tag。

a. 創建develop分支

git branch develop

git push -u origin develop

b. 創建feature分支

git checkout -b feature_TP develop # 基於develop分支創建feature_TP分支。

git push -u origin feature_TP # 如果需要多人協作,需要將其push到遠程。

c. 完成feature分支

git checkout develop

git pull origin develop

git merge --no-ff feature_TP # 將feature分支合併到develop,--no-ff參數可以保留分支信息。

git push origin develop

git branch -d feature_TP # 刪除本地feature分支。

git push origin --delete feature_TP #刪除遠程feature分支。

d. 創建relase分支

git checkout -b release-0.1.0 develop # 基於develop建立release分支並切換到該分支。

e. 完成release分支

# 1. 將release分支合併到master,並將master代碼push到遠程。

git checkout master

git merge --no-ff release-0.1.0

git push

# 2. 將release分支合併到develop,並將develop代碼push到遠程。

git checkout develop

git merge --no-ff release-0.1.0

git push

# 3. 在本地和遠程刪除該release分支。

git branch -d release-0.1.0

git push origin --delete release-0.1.0

# 4. 在master上面打tag,並push到遠程。

git tag -a v0.1.0 master

git push --tags

f. 創建hotfix分支

git checkout -b hotfix-0.1.1 master # 基於master建立hotfix分支。

g. 完成hotfix分支

操作同release分支。

# 1. 將hotfix分支合併到master,並將master代碼push到遠程。

git checkout master

git merge --no-ff hotfix-0.1.1

git push

# 2. 將hotfix分支合併到develop,並將develop代碼push到遠程。

git checkout develop

git merge --no-ff hotfix-0.1.1

git push

# 3. 在本地和遠程刪除該hotfix分支。

git branch -d hotfix-0.1.1

git push origin --delete hotfix-0.1.1

# 4. 在hotfix上面打tag,並push到遠程。

git tag -a v0.1.1 master

git push --tags

GitFlow命令

git flow命令將上述的操作進行封裝,便於使用。

GitFlow總結

1. 初始化git flow

git flow init

2.開發一個feature的步驟

a. 開始一個新feature

基於develop建立一個feature_TP分支。

git flow feature start feature_TP

b. 將feature分支push到遠程

只是一個push分支的操作。

git flow feature publish feature_TP

c. 更新feature分支代碼

只是一個pull分支的操作。

git flow feature pull origin feature_TP

d. 完成該feature

將feature分支merge到develop,並且刪掉該分支。

git flow feature finish feature_TP

e. push develop分支上的代碼

git checkout develop

git push origin develop

3.創建一個release的步驟

a. 開始一個release

基於develop建立一個release分支。

git flow release start v1.0

b. 將release分支push到遠程

只是一個push分支的操作。

git flow release publish v1.0

c. 更新release分支代碼

只是一個pull分支的操作。

git flow release pull origin v1.0

d. 完成該release

將release分支分別merge到develop和master分支,並且刪掉該分支。使用該分支的名稱打上了tag。

git flow release finish v1.0

e. push develop 和 master 分支上的代碼

git checkout develop

git push origin develop

git checkout master

git push origin master

f. push tags

將tag push到遠程

git push --tags

4.創建一個hotfix的步驟

a. 開始一個hotfix

基於master建立一個hotfix分支。

git flow hotfix start v1.1

b. 將hotfix分支push到遠程

只是一個push分支的操作。

git flow hotfix publish v1.1

c. 更新hotfix分支代碼

只是一個pull分支的操作。

git flow hotfix pull origin v1.1

d. 完成該hotfix

將hotfix分支分別merge到develop和master分支,並且刪掉該分支。使用該分支的名稱打上了tag。

git flow hotfix finish v1.1

e. push develop 和 master 分支上的代碼

git checkout develop

git push origin develop

git checkout master

git push origin master

f. push tags

將tag push到遠程

git push --tags


分享到:


相關文章: