Git Branch 分支綜述
> 基于“開發(fā)/發(fā)布/缺陷分離”模型划址,結(jié)合開發(fā)階段分配分支。主要包含master/develop/release/hotfix分支痢缎。
分支特性
Master Branch
1. 生產(chǎn)分支独旷,又稱Production Branch。
2. 該分支只接收最近發(fā)布到生產(chǎn)環(huán)境的分支蛇捌。
3. 本分支**只能**從其他分支**合并**咱台,**不能**直接**修改**提交代碼。
4. 默認(rèn)為保護(hù)分支春贸,不可被刪除遗遵。
5. 在該分支上打tag,一般Commit Message應(yīng)為"merage From Release xxx"或"merage From Hotfix yyyy"這種自動(dòng)生成的日志信息允粤。
Develop Branch
1. 公共開發(fā)分支类垫,又稱主開發(fā)分支琅坡。
2. 該分支內(nèi)包含即將發(fā)布的版本代碼。
3. 代碼來源主要為合并自master/feature分支的代碼售躁。
4. 該分支可以修改代碼茴晋,作用是提供給所有feature分支合并使用,如Podfile市袖。
5. 該分支跟蹤于master分支掀虎,即主分支有代碼變更(如hotfix代碼)烹玉,即主動(dòng)合并至最新dev分支。
?Feature Branch
1. 功能分支二打,又稱任務(wù)分支继效。
2. 該分支主要用來開發(fā)獨(dú)立的一個(gè)功能,比如禪道上某個(gè)需求厉颤,或者某個(gè)模塊的調(diào)整凡简。
3. 該分支的作用是撇清各個(gè)開發(fā)任務(wù)并行不交叉,不用反復(fù)合并代碼解決沖突帜乞。
4. 本分支來源于develop分支筐眷,完成開發(fā)后合并于develop分支匀谣。
5. 此分支上的pod可指定本地目錄;但合并至develop時(shí)應(yīng)指定Branch或commit Id必怜。
Release Branch
1. 版本分支梳庆,又稱提測分支卑惜。
2. 本分支的作用為合并當(dāng)期需要發(fā)布的代碼,并提交測試更米。
3. 本分支來源于develo分支毫痕,即在開發(fā)完成后提測時(shí)各個(gè)feature合并至develop之后最新merge的代碼。
4. 本分支終結(jié)于通過測試即發(fā)布時(shí)栏笆,自動(dòng)合并至master分支蛉加,并刪除。
5. 此分支上的pod不能依賴本地目錄厂抽,通過版本Tag指定或遠(yuǎn)端分支代碼commit指定丁眼。
Hotfix Branch
1. 緊急修復(fù)分支。
2. 該分支的作用為修復(fù)線上bug嵌施,即在正常的release迭代版本前插隊(duì)發(fā)布的分支莽鸭。
3. 該分支的來源為master分支硫眨,即線上最新代碼。
4. 該版本的終點(diǎn)為master分支巧号,在修復(fù)代碼上線后合并主分支并刪除此分支姥闭。
5. 如需要后續(xù)版本中保留此代碼,則需要手動(dòng)同步master代碼到develop棚品。
Git Flow 工作流
> 結(jié)合預(yù)設(shè)模版铜跑,組合指令,在不同開發(fā)階段自動(dòng)創(chuàng)建&合并分支掷空。
正常軟件開發(fā)周期為需求評(píng)審階段/開發(fā)階段/測試階段/發(fā)布階段。
對(duì)應(yīng)的代碼管理順序?yàn)樾陆ǜ北?開發(fā)代碼/合并代碼/修改代碼/發(fā)布代碼护锤。
工作流
配置模版
初始化一組新的gitflow命令酿傍,主要是指派各個(gè)分支組名拧粪。
```
git flow init
```
```
同理sourceTree:
"頂部菜單"->"倉庫/repository"->"gitflow或hg flow"->"初始化倉庫"
```
開發(fā)新功能
需求評(píng)審階段沧侥,當(dāng)我們接到本階段開發(fā)計(jì)劃后會(huì)根據(jù)模塊及需求拆分成任務(wù)。
```
git flow feature start [featureName]
```
```
同理SourceTree:
"選中當(dāng)前feature分支"->"頂部菜單"->"倉庫/repository"->"gitflow或hg flow"->"建立新的功能"
```
1. 首先我們會(huì)從先Checkout develop分支(實(shí)際只會(huì)操作一次)獲取最新的團(tuán)隊(duì)代碼癣朗。
2. 然后基于develop分支建立多個(gè)feature分支旷余。
3. 分支命名為"需求編號(hào)_功能描述_作者"或"功能模塊_描述_作者",如"**4396_blackFriday_wsc**"或"**feature/webview_deprecated_jgeng**" 扁达。
4. 原則上只需要及時(shí)合并最新develop代碼跪解;如果需要依賴其他開發(fā)分支代碼,手動(dòng)操作即可窘行。
完成新功能
需求開發(fā)階段图仓,當(dāng)我們拿到項(xiàng)目排期后根據(jù)所屬模塊在各自feature分支開發(fā)即可;當(dāng)功能開發(fā)完成后將合并至公共開發(fā)分支develop惶看。
```
git flow feature finish [featureName]
```
```
同理SourceTree:
"選中當(dāng)前feature分支"->"頂部菜單"->"倉庫/repository"->"gitflow或hg flow"->"完成功能"
```
1. 首先在各自的任務(wù)分支上編寫代碼碳竟。
2. 然后拉取最新的develop分支代碼并合并至自己的分支狸臣。
3. 解決沖突,保證++可以正常運(yùn)行++诈泼,保證++podfile沒有依賴本地代碼++铐达。
4. 點(diǎn)擊完成功能,將自動(dòng)合并當(dāng)前feature代碼至develop分支并刪除此feature分支唐断。
提交測試
> 到提測日的時(shí)候杭抠,各自任務(wù)分支代碼應(yīng)該已經(jīng)開發(fā)完畢并完成自測偏灿。
此時(shí)代碼倉庫狀態(tài)應(yīng)該自動(dòng)清理完所有當(dāng)期提測的feature分支并自動(dòng)合并至develop分支,負(fù)責(zé)本次版本發(fā)布的同學(xué)創(chuàng)建提測分支铆遭。
```
git flow release start [versionName]
```
```
同理SourceTree:
"選中當(dāng)前feature分支"->"頂部菜單"->"倉庫/repository"->"gitflow或hg flow"->"建立新的發(fā)布版本"
```
1. 首先我們要保證所有的提測分支應(yīng)該已經(jīng)合并至develop分支沿猜,ddl之后合并的即算延期啼肩。
2. 然后基于已經(jīng)合并本期所有內(nèi)容的develop新建release分支,此后develop分支得到解放呼畸,可以繼續(xù)合并下個(gè)版本的feature分支颁虐。
3. 測試期間遇到bug將統(tǒng)一在release分支上修復(fù)另绩;如擔(dān)心存在經(jīng)常性的合并沖突可自行新建bugfix分支并手動(dòng)合并到此release分支。
4. 當(dāng)開始測試后該release分支將與develop分支剝離主從關(guān)系蹦漠,避免dev上有下期的代碼也合并到本期release上车海。
5. 當(dāng)本次版本通過測試后,即在最后一次commit上修改版本號(hào)并Archive&upload埋同。
完成發(fā)布
需求評(píng)審階段棵红,當(dāng)我們接到本階段開發(fā)計(jì)劃后會(huì)根據(jù)模塊及需求拆分成任務(wù)逆甜。
```
git flow feature finish [versionName]
```
```
同理SourceTree:
"選中當(dāng)前feature分支"->"頂部菜單"->"倉庫/repository"->"gitflow或hg flow"->"完成版本發(fā)布"
```
1. 當(dāng)本次版本通過審核后,點(diǎn)擊完成咏窿。
2. gitflow會(huì)先將本次發(fā)布分支的代碼合并到master分支错敢,并標(biāo)記tag稚茅。
3. gitflow將在合并完成后平斩,自動(dòng)同步最新的master代碼到develop供下期開發(fā)的feature分支合并使用绘面。
#### 緊急修復(fù)
需求評(píng)審階段,當(dāng)我們接到本階段開發(fā)計(jì)劃后會(huì)根據(jù)模塊及需求拆分成任務(wù)晚凿。
```
git flow hotfix start [bugName]
git flow hotfix finish [bugName]
```
```
同理SourceTree:
"選中當(dāng)前feature分支"->"頂部菜單"->"倉庫/repository"->"gitflow或hg flow"->"建立新的修復(fù)補(bǔ)丁/完成修復(fù)補(bǔ)丁"
```
1. 當(dāng)線上版本出現(xiàn)問題時(shí)歼秽,需要基于master分支新建hotfix分支情组。
2. 當(dāng)完成修復(fù)后,gotflow將自動(dòng)合并hotfix分支至master分支并標(biāo)記tag肆氓。
3. 在合并完成后谢揪,gitflow將自動(dòng)同步最新的master至develop分支。
Git Rule Remarks
目的
git branch
1. 方便代碼管理寺滚,在合適的時(shí)機(jī)合并分支
2. 及時(shí)清理不必要的分支
git commit log提交信息應(yīng)當(dāng)簡明扼要村视,主要用途在于
1. git repo中查看回顧此文件經(jīng)歷的需求
2. Jenkins中對(duì)比兩次構(gòu)建之間的提交
3. 關(guān)心其他成員修改模塊是否對(duì)自己代碼產(chǎn)生影響
實(shí)踐要求
分支命名采取責(zé)任制的形式 "描述 - 所屬人"蚁孔。具體有兩種命名規(guī)則:
- 根據(jù)需求來惋嚎,采取"需求編號(hào)_需求描述_責(zé)任人","4396_blackFriday_wsc"
- 根據(jù)功能來, 采取"功能模塊_操作描述_責(zé)任人","webview_deprecated_lbw"
提交信息命名采取關(guān)鍵詞的形式 "xx - details"另伍。具體有兩種命名規(guī)則:
- 根據(jù)增刪改查件來,采取操作+文件的方式摆尝,"Add/Del/Fix - xx類/yy文件堕汞;
- 根據(jù)所設(shè)計(jì)的模塊,采取功能+描述的方式琐鲁,"Detail - 新增折扣標(biāo)簽"
## 補(bǔ)充內(nèi)容
//清理本地repo占用磁盤過大
```
git gc --prune=now?
```