天天看點

GitFlow總結集中式工作流功能分支工作流GitFlow分支詳解注意事項:Git 基本指令操作GitFlowGitFlow指令

集中式工作流

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

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

功能分支工作流

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

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

GitFlow

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

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

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

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

GitFlow總結集中式工作流功能分支工作流GitFlow分支詳解注意事項:Git 基本指令操作GitFlowGitFlow指令

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 developgit merge --no-ff feature_TP # 将feature分支合并到develop,--no-ff參數可以保留分支資訊。

git push origin developgit 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.0git 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 mastergit 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總結集中式工作流功能分支工作流GitFlow分支詳解注意事項:Git 基本指令操作GitFlowGitFlow指令

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 developgit 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