譯者: 雖然 git 已經是網際網路行業主流的版本控制工具, 但對於 git 新手, 或想從 svn 遷至 git 的團隊而言, 一個簡明合理的流程正規化還是很有參考價值的.
Gitflow 工作流程
是一個Git工作流程設計,由 nvie 的 Vincent Driessen 釋出並流行起來。Gitflow工作流圍繞專案的版本管理定義了嚴格分支模型。這為管理大型專案提供了一個強大的框架。
Gitflow 非常適合具有釋出週期的專案。此工作流程不會增加任何超出功能分支工作流程的新概念或命令。相反,它為不同的分支分配了非常具體的角色,並定義它們應該何時以及如何進行互動。除了feature分支外,它還使用單獨的分支來準備,維護和記錄版本。當然,您還可以利用功能分支工作流
的所有優勢:拉取請求,隔離實驗和更高效的協作。
入門
Gitflow 實際上只是一個 Git 工作流的抽象概念。它規定了有哪些型別的分支以及如何將它們合併在一起。我們將在下面提到這些分支的目的。git-flow工具集是一個可安裝的命令列工具。git-flow的安裝過程很簡單。git-flow的軟體包可在多個作業系統上使用。在OSX系統上,您可以執行 brew install git-flow
。在Windows上,您需要下載並安裝git-flow。安裝git-flow後,您可以在專案中執行 git flow init
來使用它。Git-flow 是 Git 的一層包裝。該 git flow init 命令是原來 git init 命令的擴充套件,除了為您建立分支之外,不會更改倉庫任何內容。
這個怎麼運作
Develop 和 Master 分支
此工作流使用兩個分支來記錄專案的歷史記錄。master分支記錄正式釋出的歷史, 而develop分支用作功能開發的整合分支。在使用版本號標記master的提交也很方便。
第一步是用develop分支補充主分支。一種簡單的方法是讓一個開發人員在本地建立一個空develop分支並將其推送到伺服器:
git branch develop
git push -u origin develop
複製程式碼
此分支將包含專案的完整歷史記錄,而master將包含節選的版本。其他開發人員現在應該克隆遠端倉庫並跟蹤develop分支.
使用 git-flow 時,git flow init 會在現有repo上建立develop分支:
$ git flow init
Initialized empty Git repository in ~/project/.git/
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master]
Branch name for "next release" development: [develop]
How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []
$ git branch
* develop
master
複製程式碼
功能分支
每個新功能都應駐留在自己的分支中,可以將其推送到遠端倉庫以進行備份/協作。但是,feature分支使用develop作為其父分支,而不master。feature分支開發完成後,它將合併回develop分支。feature分支永遠不應直接與master互動。
請注意,feature與develop分支合併是功能分支工作流
的意圖和目的。但是,Gitflow工作流程並不止於此。
feature分支通常是從最新的develop分支建立出來的。
建立功能分支
沒有git-flow擴充套件:
git checkout develop
git checkout -b feature_branch
複製程式碼
使用git-flow擴充套件時:
git flow feature start feature_branch
複製程式碼
繼續你的工作,像往常一樣使用Git。
完成功能分支
當你完成該功能的開發工作後,下一步是合併feature_branch到develop。
沒有git-flow擴充套件:
git checkout develop
git merge feature_branch
複製程式碼
使用git-flow擴充套件:
git flow feature finish feature_branch
複製程式碼
Release 分支
一旦develop有足夠的功能可用於釋出(或預定的釋出日期即將來臨),您就可以從develop分支分出release分支。建立此分支將啟動下一個釋出週期,因此在此分支不能新增任何新功能,只能做錯誤修復,文件生成和其他面向釋出的任務。一旦準備好釋出,release分支就會合併到master並標記一個版本號。此外,它還應該合併回可能已有更新的develop分支。
使用一個專有分支來準備釋出可以使一個團隊在完善當前版本的同時,另一個團隊繼續為下一個版本開發功能。它還建立了一個可明確定義的開發階段(比如說,“本週我們正在為版本4.0做準備”,並且實際上在倉庫結構中可以看到它)。
建立release分支是另一種簡單的分支操作。像feature分支一樣,release分支也基於develop分支。可以使用以下方法建立新release分支。
沒有git-flow擴充套件:
git checkout develop
git checkout -b release/0.1.0
複製程式碼
使用git-flow擴充套件時:
$ git flow release start 0.1.0
Switched to a new branch 'release/0.1.0'
複製程式碼
一旦release分支準備好釋出,它會被合併到master和develop,然後release分支將被刪除。合併回develop很重要,因為在新分支裡需要訪問到release分支的重要更新。如果您的組織強調程式碼審查,這將是拉取請求的理想位置。
要完成release分支,請使用以下方法:
沒有git-flow擴充套件:
git checkout develop
git merge release/0.1.0
複製程式碼
或者使用git-flow擴充套件:
git checkout master
git checkout merge release/0.1.0
git flow release finish '0.1.0'
複製程式碼
Hotfix 分支
維護或“hotfix”分支用於快速修補生產版本。hotfix分支很像release分支和feature分支,除了它是基於master而不是develop。它應該是唯一直接從master分出的分支。一旦修復完成,它應該合併到master和develop(或當前release分支),並且master應該用已更新的版本號標記。
通過專有的分支修復錯誤,使您的團隊可以在不中斷其餘工作流程或等待下一個釋出週期的情況下解決問題。您可以將hotfix分支視為直接互動與master的臨時release分支。一個hotfix分支可以使用以下方法建立:
沒有git-flow擴充套件:
git checkout master
git checkout -b hotfix_branch
複製程式碼
使用git-flow擴充套件時:
$ git flow hotfix start hotfix_branch
複製程式碼
與完成release分支類似,hotfix分支也合併到master和develop.
git checkout master
git merge hotfix_branch
git checkout develop
git merge hotfix_branch
git branch -D hotfix_branch
$ git flow hotfix finish hotfix_branch
複製程式碼
舉例
演示功能分支流程
的完整示例如下。假設我們有一個帶master分支的倉庫。
git checkout master
git checkout -b develop
git checkout -b feature_branch
# 在 feature 分支上進行開發
git checkout develop
git merge feature_branch
git checkout master
git merge develop
git branch -d feature_branch
複製程式碼
除了feature和release流程,還有一個hotfix例子如下:
git checkout master
git checkout -b hotfix_branch
# 開發完成後提交到 hotfix_branch
git checkout develop
git merge hotfix_branch
git checkout master
git merge hotfix_branch
複製程式碼
摘要
在這裡,我們討論了Gitflow工作流程。Gitflow是您和您的團隊可以使用的眾多Git工作流程之一。
關於Gitflow的一些關鍵要點:
- 該工作流程非常適合基於釋出的軟體工作流程。
- Gitflow提供一個專有的生產環境修復渠道。
Gitflow的總體流程:
- 從master建立一個develop分支
- 從develop建立一個release分支
- 從develop建立一個feature分支
- 當feature完成時它將合併到develop分支
- 當release完成時它將合併到develop和master分支
- 如果master檢測到問題,則從master建立hotfix分支
- 一旦hotfix完成,它將合併到master和develop分支
接下來,瞭解Forking工作流程 或訪問我們的工作流程比較頁面。