Gitflow工作流是以Git作為原始碼管理工具的團隊的一種管理,開發,維護,釋出的工作流程,它為專案的釋出維護等工作定義了嚴謹的分支管理模型,同時也為大型專案提供了健壯的管理框架。
Gitflow工作流並不會創造新的Git概念和命令,相反,Gitflow工作流為每個指定的分支定義嚴格的功能角色,定義每個分支負責明確的工作任務,指定其在適當的時候進行適當的反應。另外,Gitflow工作流將會使用獨立分支負責維護,開發,釋出等工作。當然我們仍然需要使用如pull requests等工作方式來進行團隊共同作業。
Gitflow工作流仍然使用中心倉庫作為開發團隊資訊交流中心,和其他的Git工作流程一樣,開發人員使用本地倉庫進行工作,然後推播提交工作到中心倉庫,唯一的區別就是Gitflow工作流的分支組織結構不一樣。
倉庫啟動時,需要指定一個主分支 master
,分支如下:
主分支將一直存在於這個倉庫,直到專案結束或者倉庫刪除。
和使用單一的master分支不一樣的是,Gitflow工作流將使用兩個分支(master分支和dev分支)來記錄整個專案的履歷。master分支用於記錄專案的官方釋出履歷,而dev分支作為功能(feature)分支聚集中心,同時也約定master分支將使用版本號來進行標記,以備後續的查詢和參照,這兩個分支的關係如下:
Gitflow工作流的後續工作都將圍繞這兩個分支展開。
而且這兩個分支將不會刪除,一直存在
嚴格意義上講,每一個新的開發工作內容都應該在獨立的分支中完成,這些工作在完成後都應該被推播提交到中心倉庫以備持久,備份以及相互共同作業。但是需要注意的是,feature/bugfix分支不能從master分支繼承,應當從dev分支繼承,當一個開發工作結束後,這些完成的工作都應該推播提交到dev分支,切記,feature/bugfix分支不能直接和master分支進行互動,到這一步,程式碼分支結構如下:
注意:此處的 feature/bugfix 分支都是從 dev 分支開啟的,並且只能合併到 dev
bugfix 分支不止可以在 dev 開發時使用,也可以在 release 即將釋出時使用。主要用於場景是,功能開發中,前一個功能出現問題,這時可以啟動一個 bugfix 來進行修改;同樣的在 release 即將釋出之前,如果測試出來問題,也可以啟動一個 bugfix 來進行修改。
注意:bugfix 嚴格情況下,只能在 dev 和 release 分支上啟動
當我們要進行正式釋出的時候,我們需要建立獨立的release分支,加入release分支後程式碼分支結構如下:
當develop分支包含了足夠適合釋出的功能或者達到了釋出計劃日期後,將會啟動釋出流程,我們前面也提到Gitflow工作流的每項工作都基於獨立的分支進行,因此我們將從dev分支衍生(fork)出獨立的release分支,從建立新的release分支開始,我們就進入了新的釋出週期,因此這個release分支將不再接受新的功能的加入,但是嚴重bug修改除外,後續的檔案更新,以及其他任何和這次釋出相關的工作都應該在這個release分支上進行,一旦釋出工作準備完成,並確定要上市的時候,這個release分支需要合併回master分支,並且使用版本號為master分支進行標記,同時由於release分支可能存在bug的修改等相關改動,因此這些修改也需要合併到dev分支,以備這些修改能正確反映到後續版本的釋出中。
使用獨立的釋出分支可以讓釋出人員進行釋出的同時,也不影響開發人員進行後續版本的開發,這樣也就讓開發各個週期定義變得更清晰,當然,我們對release分支有些約定
hotfix(maintenance)分支用於快速修正線上產品出現的嚴重問題,hotfix分支是唯一直接從master分支衍生(fork)的分支,當hotfix的工作完成後,這些工作應該合併回master分支和dev分支,如果當前有釋出工作正在執行,這些工作同時需要合併到當前的release分支,同時master分支需要使用更新版本號進行標記,程式碼分支結構如下:
使用獨立的hotfix分支,可以讓開發團隊可以快速的定位緊急的問題,但同時也不會打斷當前開發工作的流程,也不需要再等到下班版本的更新。
實際上可以把hotfix分支看做一個直接和master分支進行互動的臨時release分支。
以上就是一個專案的完整的開發git工作流,主要針對於開發人員的程式碼開發和釋出。