# 分支管理
## 分支分類及作用
一共5類分支,分別為master,dev,feature, release,hotfix。
master分支:穩(wěn)定版分支,線上運(yùn)行的版本。
dev分支:開發(fā)分支,開發(fā)的主力分支。
feature分支:開發(fā)的子分支,用以開發(fā)產(chǎn)品的某個功能。
release分支:用以測試、修復(fù)線下bug及發(fā)布的分支。【不允許任何分支向release合并】
hotfix分支:用以修復(fù)線上bug的分支, 由于線上的代碼只能有release分支發(fā)布,所以目前hotfix分支與release分支合為一支,存在且只存在release分支。
## 分支的管理策略
## 版本的命名策略
版本采用三段式,主版本號.功能版本號.修訂版本號,例如:3.2.1。主版本號為3。功能版本號:2。修訂版本號:1
上級版本號變動,所有下級版本號清0。例如版本號1.1.11。主版本改為2。則現(xiàn)版本號改為2.0.0
###產(chǎn)品改變完全不兼容前一個版本(主版本號加1)
主版本號加1,例如:原版本號為1.1.0 則現(xiàn)版本號為2.0.0。
###大功能變動(功能版本號加1)
每次遇到feature大的版本功能開發(fā)完畢,在測試完畢,release分支合并入master/dev分支前,在release分支上記一個功能版本tag標(biāo)簽,例如:2.1.0。依次遞增1
###小功能變動與bug修復(fù)。(修訂版本號加1)
每次遇到feature小的功能新增或者優(yōu)化,在測試完畢,release分支合并入master/dev分支前,在release分支上記錄一個小的三位版本tag標(biāo)簽,例如:2.1.1。依次遞增1
每次遇到hotfix修改bug完畢,在release分支合并入master分支前,則記一個修復(fù)bug版本tag標(biāo)簽,例如:2.1.2。依次遞增1
###
在操作分支時記得看下tag版本號,重要!重要!重要!
## 項目中的分支操作策略
### 在第一次開發(fā)時的分支操作(第一個開發(fā)feature功能的人)
不能在dev上分支上直接開發(fā),要在拉取的feature中開發(fā)。在dev上開發(fā)的任何功能都會被管理策略回滾掉。
克隆遠(yuǎn)端倉庫。
拉取/切換到dev分支 保證與origin dev分支一致。
從本地dev分支拉取feature分支(命名方式:featrue_產(chǎn)品名_功能_(產(chǎn)品下一個功能版本號)_拉取日期)。
將本地feature分支push到遠(yuǎn)端origin。
通知其他隊友采用此分支。
### 在開發(fā)階段中的分支操作(后續(xù)開發(fā)feature功能的人)
不能在dev上分支上直接開發(fā),要在拉取的feature中開發(fā)。在dev上開發(fā)的任何功能都會被管理策略回滾掉。
克隆遠(yuǎn)端倉庫。
拉取/切換到feature分支,保證與origin feature分支一致。
在feature分支開發(fā)相應(yīng)功能,完成后push到origin。
### 在開發(fā)完成時的分支操作
此時不允許其他分支合并到dev分支
確保所有成員都已提交完畢,保證本地feature與origin feature分支一致,本地試運(yùn)行。
本地切換分支到dev,拉取最新的dev分支。
將origin的feature分支合并到本地的dev分支。
push dev到遠(yuǎn)端origin上。
執(zhí)行命令 git remote update , 拉取origin各個分支。
執(zhí)行命里 git remote prune origin,清除本地沒有和遠(yuǎn)端服務(wù)器對應(yīng)的分支。
如果存在origin release ,沒有其他產(chǎn)品線在使用origin release分支的情況下,合并origin release 到 dev,然后再刪除origin release。
如果有人在使用orgin release請協(xié)商進(jìn)行,最好上線有節(jié)奏,不要一起上線。(注意操作,發(fā)現(xiàn)線上存在hotfix分支,則此release是為hotfix使用,不能刪除,一切讓位于hotfix,暫時不發(fā)布release測試)。
從origin dev[新建,新建,新建。重要的事情多說幾遍,是新建release]本地分支release(若不存在origin release,才可以刪除本地release)。
將本地release push到 origin release。
在Jenkins上發(fā)布到測試環(huán)境,通知測試隊友開始測試。
此時不允許其他分支合并到dev分支
### 在測試階段遇到bug時的分支操作
此時不允許其他分支合并到dev分支
本地拉取/切換到release分支,保持與origin release一致。
在release分支上修改線上遇到的bug。自測后push到origin
本地切換到dev, 更新dev,合并origin release到本地dev分支。
push 本地dev到origin dev。
### 在測試完畢后的分支操作
本地拉取/切換到release分支,保持與origin release一致。
在release分支上修改線上遇到的bug。自測后push到origin。
本地切換到dev, 更新dev,合并origin release到本地dev分支。
push 本地dev到origin dev。
本地拉取/切換到master分支,保持與origin master一致。
合并origin release到本地master分支上。
在本地master分支上打上tag(命名方式:產(chǎn)品名_本次版本號(feature上的版本號))。
push本地master到origin master上 包括tag標(biāo)簽【注意:一定要記得選擇將自己打好的tag勾選push到遠(yuǎn)端】。
刪除origin release。刪除feature分支(本地和origin)。
### 在遇到線上bug時的分支操作
#### 如果origin已存在release分支
本地拉取/切換到dev分支,保持與origin dev一致。
合并origin release到本地dev分支上, push本地dev到origin dev。
刪除origin release。
下面的步驟參考【#### 如果origin不存在release分支】
#### 如果origin不存在release分支
本地拉取/切換到master分支,保持與origin master一致。
從orgin master拉取本地hotfix分支(命名方式:hotfix_master版本號_修復(fù)bug_日期)
本地hotfix推送origin hotfix。
在本地hotfix上修復(fù)bug。
從hotfix上[新建,新建,新建。重要的事情多說幾遍,是新建release]本地分支release
將本地release push到 origin release。
在Jenkins上發(fā)布到測試環(huán)境,通知測試隊友開始測試。
重復(fù)4,5,6,7步驟直到線上bug修復(fù)完畢。
本地切換到dev, 更新dev,合并origin release到本地dev分支。
push 本地dev到origin dev。
本地拉取/切換到master分支,保持與origin master一致。
合并origin release到本地master分支上。
在本地master分支上打上tag(命名方式:產(chǎn)品名_本次版本號(小版本號))。
push本地master到origin master上 包括tag標(biāo)簽【注意:一定要記得選擇將自己打好的tag勾選push到遠(yuǎn)端】。
刪除origin release。