GitFlow 流程是由 Vincent Driessen 所發想,他是一位來自荷蘭、熱情的軟體開發者。

model.png

什麼是 GitFlow 流程 ?

GitFlow 流程是一個分支模型,工作流程建構在幾個主要分支上,幾乎不會有任何無法解決的問題。

  • 主要分支
    • master: 最終釋出版本
    • develop: 開發中版本
  • 支援分支
    • feature: 實作新功能
    • release: 準備發佈版本
    • hotfix: 快速修正

主要分支會一直存在支援分支則是合併完後就會刪除

可建立 接受合併
master hotfix hotfix release
develop feature release hotfix release feature

主要分支

master

master 分支代表最終釋出階段,將工作成果合併到 master,通常不會再從 master 建立新分支,除非針對某些必須修正的 bug,則可建立 hotfix 分支,修正後合併,即便其他分支已修正此 bug。

master 分支也是用來標記發行版本的地方。

develop

develop 分支算是一種 Beta 版軟體 分支,開始時做新功能時,必須從 develop 建立 feature 分支後開始工作,完成後可以合併回 develop,之後刪除 feature

develop 會推送到遠端 Git Repository 與他人共用。

支援分支

feature

當需要實作新功能時,必須從 develop 建立 feature 分支,完成後合併回 develop,之後刪除。

feature 名稱會以 feature/NewAuthenitcation or feature/#1211 (trcae code number) 命名。

feature 分支主要是給自己使用,如果有需要和團隊成員一起處理,也可以推送到遠端。

release

到某個時間點會需要為下一次發行版本打包,需從 develop 建立分支,為 feature 分支命(e.q. release/1.0)。

release 階段不再接受新功能,因此不能將 develop 合併到 release,只能從 release 修正 bug,讓測試人員測試。完成後合併到 master 並新增 tag,如果有修正 bug,也要合併到 develop,之後刪除。

release 會推送到遠端 Git Repository 與他人共用。

hotfix

hotfix 分支只能從 master 建立,一旦修好 bug,再合併到 masterdevelop,之後刪除。

hotfix 通常不會推送到遠端,只有在需要其他團隊成員協助時才會推送。


git-flow

什麼是 git-flow ?

git-flow 是一個 git 擴充功能,運用簡單的指令實作 GitFlow 流程。

git-flow 是一個以 merge 概念為基底的解決方案,它並無提供 rebase 特性分支的功能

安裝

詳見 git-flow 備忘清單#安裝

Git for Windows 2.6.4^ 已有內建 git-flow
SourceTree 有內建 git-flow

指令

初始化

git flow init

Feature

$ git flow feature start <name> [<base>]
# - 從 develop 最後一個版本建立 feature/<name> 分支
# - 自動切換到這個分支

$ git flow feature finish <name>
# - merge feature 分支到 develop
# - 刪除 feature 分支
# - 切換到 develop 分支

$ git flow feature publish <name>
# push 分支到遠端

$ git flow feature track <name>
# 追蹤分支

$ git flow feature delete <name>
# 刪除分支

Release

$ git flow release start <name> [<base>]
# - 從 develop 最後一個版本建立 release/<name> 分支
# - 自動切換到這個分支

$ git flow release finish <name>
# - merge release 分支到 master, develop
# - 在 master 加上版本號 tag
# - 刪除 release 分支
# - 切換到 master 分支

$ git flow release publish <name>
# push 分支到遠端

$ git flow release track <name>
# 追蹤分支

$ git flow release delete <name>
# 刪除分支

Hotfix

$ git flow hotfix start <name> [<base>]
# - 從 master 最後一個版本建立 hotfix/<name> 分支
# - 自動切換到這個分支

$ git flow hotfix finish <name>
# - merge hotfix 分支到 master, develop
# - 在 master 加上版本號 tag
# - 刪除 hotfix 分支
# - 切換到 master 分支

$ git flow hotfix publish <name>
# push 分支到遠端

$ git flow hotfix track <name>
# 追蹤分支

$ git flow hotfix delete <name>
# 刪除分支

Reference