我們的專案使用Git作為程式碼倉庫、和版本控制工具。
Git有幾種Workflow,來管理程式碼版本變更流程,我們採用Gitflow Workflow流程。
Gitflow Workflow,採用了master、develop、release、feature、hotfix等幾個分支。master、develop分支的生命週期是永久的,release、feature、hotfix分支都是輔助分支,其生命週期是短暫的。
各個分支的作用及意義,見下。
master分支
master分支用於儲存官方釋出歷史,與線上的版本一致。要確保任何時候從master分支都可以拿到處於可釋出狀態的程式碼。
一個工程只有一個master分支,建立Git工程後自動建立,生命週期為永久。
跟master分支打交道的分支有release分支、hotfix分支:
- 測試通過後,“配置管理員”(以下簡稱為“配管”)將release分支合併到master分支。
- 線上緊急修復後,“配管”將hotfix分支合併回master分支。
release分支合併到master分支後,需要在master分支上打Tag(記錄里程碑),標記官方釋出的版本號。
“配管”負責在master分支上打Tag。
develop分支
develop是開發整合的分支,所有開發完成的程式碼提交到此分支。功能累積到一定程度或者週期性釋出需要提測時,從此分支遷出程式碼到release分支,進行測試。要確保任何時候都可以從develop分支拿到最新開發進展的程式碼。
一個工程只有一個develop分支,最初由“配管”建立,生命週期為永久。
跟develop分支打交道的分支有release分支、hotfix分支、feature分支:
- “開發主管”提測時,“配管”從develop分支遷出程式碼到release分支。
- release分支測試通過後,“配管”將release分支合併回develop分支。
- 線上緊急修復後,“配管”將hotfix分支合併到develop分支。
- 功能開發完成後,“開發主管”(需要多人協作開發的feature)或各個開發(獨立開發的feature)將feature分支合併到develop分支。
release分支
release是測試分支,用於測試某個待發布的版本。從develop分支遷出程式碼到release分支,凍結程式碼(除了修改bug),進行測試。測試通過後合併到master分支,正式釋出。
release分支使得待發布版本的測試與新版本的開發活動可以並行,互不干擾。
一個工程有多個release分支,一個待測試的、準備釋出的版本一個分支。release分支的生命週期不是永久的,最初起源於develop分支,最終歸於master和develop分支。提測時,“配管”建立一個release分支;測試通過、合併到master分支及develop分支後,“配管”刪除該分支。
跟release分支打交道的分支有develop分支、master分支:
- “開發主管”提測時,“配管”從develop分支遷出程式碼、建立一個release分支。
- release分支測試通過後,“配管”將release分支合併到master分支,同時合併回develop分支。
測試、開發修改bug,都是在release分支上進行。在此期間,應嚴禁新功能的程式碼併入release分支,應合併到develop分支。
feature分支
feature分支是各個功能的開發分支,開發完成後合併到develop分支。
feature分支使得多個人可以並行開發,互不干擾。
一個工程有多個feature分支,一個feature一個分支。feature分支的生命週期不是永久的,最初起源於develop分支,最終也歸於develop分支。開始開發一個新功能時,由“開發主管”或開發自己建立一個feature分支;功能開發完成、合併到develop分支後,“開發主管”或開發自己刪除該分支。
跟feature分支打交道的分支只有develop分支:
- 對於需要多人協作開發的feature:“開發主管”從develop分支遷出程式碼、建立一個feature分支,然後通知給需要協作的各個開發;各個開發在此分支上提交程式碼。各個開發的程式碼都提交後,“開發主管”將該feature分支合併到develop分支,然後刪除該分支。
- 對於不需協作、開發可獨立完成的feature:可以由開發自己從develop分支遷出程式碼、建立一個feature分支;開發完成後,開發自己將該feature分支合併到develop分支,然後刪除該分支。
hotfix分支
hotfix分支用於緊急修復線上的bug。
hotfix分支使得線上bug的緊急修復,與待發布版本的測試、以及新版本的開發活動可以並行,互不干擾。
一個工程有多個hotfix分支,一次hotfix建立一個分支。hotfix分支的生命週期不是永久的,最初起源於master分支,最終歸於master和develop分支。提出hotfix時,“配管”建立一個hotfix分支;bug修改完成、合併回master分支以及develop分支後,“配管”刪除該分支。
跟hotfix分支打交道的分支有master分支、develop分支:
- 需要緊急修復線上bug時,“配管”從master分支的某個Tag(一般是最新的)遷出程式碼、建立一個hotfix分支。
- bug修改完成、測試通過後,“配管”將該hotfix分支合併回master分支,同時合併到develop分支。
hotfix分支合併回master分支後,需要在master分支上打一個Tag,標記當前版本,小版本號升位。
具體到一個工程中,各個階段的具體流程為:
專案啟動
準備開發環境
測試流程
釋出流程:
hotfix流程: