Git 的一大特點就是可以創(chuàng)建很多分支并行開發(fā)囊骤。正因為它的靈活性关斜,團隊中如果沒有一個成熟的分支模型的話,那將會是一團糟览效。
分支模型
有個比較成熟的分支模型git flow。需要注意的是虫几,它只是一個模型锤灿,而不是一個工具;你可以用工具去應(yīng)用這個模型辆脸,也可以用最樸實的命令行但校。所以,重要的是理解概念啡氢,不要執(zhí)著于實行的手段状囱。
簡單理解幾個概念:
- master-最為穩(wěn)定功能最為完整的隨時可發(fā)布的代碼;
- hotfix——修復(fù)線上代碼的 bug术裸;
- develop——永遠是功能最新最全的分支;
- feature——某個功能點正在開發(fā)階段亭枷;
- release——發(fā)布定期要上線的功能袭艺。
「master」和「develop」是主要分支,其他分支是派生而來的叨粘。各類型分支之間的關(guān)系用一張圖來體現(xiàn)
開發(fā)流程
1.開發(fā)接收需求猾编,切換到develop分支,pull develop分支最新代碼升敲,拉取特性分支feature答倡;
2.每一個新功能的開發(fā)都應(yīng)該各自使用獨立的feature分支。為了備份或便于團隊之間的合作驴党,這種分支也可以被推送到中央倉庫瘪撇,B和A可以同時在一個特性分支上協(xié)作。
3.功能開發(fā)完畢并且自測后鼻弧,先切換到 develop分支设江,pull最新代碼,切回功能所在的feature攘轩,把develop分支的代碼合并進來,有沖突和配合的人一起解決码俩。
4.到 GitLab 上的項目首頁創(chuàng)建feature合并到develop的合并請求(merge request)度帮,比對和上個版本的代碼變化,指定有合并的和參與代碼審核的同事稿存。(代碼審核)
5.項目負責(zé)人在收到合并請求時笨篷,應(yīng)該先做下代碼審核看看有沒有明顯的嚴重的錯誤;有問題就找負責(zé)開發(fā)的人去修改瓣履,沒有就接受請求并刪除對應(yīng)的 feature 分支率翅。
有問題的代碼開發(fā)者自己修改后在push到倉庫,代碼審核頁面會同步最新修改袖迎。
6.負責(zé)測試的人從develop創(chuàng)建一個 release 分支部署到測試環(huán)境進行測試冕臭,若發(fā)現(xiàn)了 bug,相應(yīng)的開發(fā)人員就在 release 分支上或者基于 release 分支創(chuàng)建一個分支進行修復(fù)燕锥。
7.當(dāng)確保某次發(fā)布的功能可以發(fā)布時辜贵,負責(zé)發(fā)布的人將 release 分支合并進 master 和 develop 并打上 tag,然后打包發(fā)布到線上環(huán)境归形。
流程圖如下:
實際開發(fā)中會有幾個問題:
1.同時維護master和develop兩個分支很耗時托慨,每次release分支發(fā)完版都要同步回master&develop;
2.功能并行開發(fā)時暇榴,無法及時同步上線和測試節(jié)點厚棵;
某個業(yè)務(wù)方的測試現(xiàn)在需要測試蕉世,但是不再這個版本,就無法操作婆硬。因為release分支是從develop上拉取的狠轻,同一個節(jié)點不能合并不再本期發(fā)版計劃的代碼step[5]
測試環(huán)境也只能同時發(fā)布一個分支step[6]
3.審核代碼后再次修改審核。step[6]&step[4]
推薦方案
我們簡單的維護兩個主要分支柿祈,不再維護release分支哈误。
master -- 功能最穩(wěn)定,線上正在運行躏嚎,可隨時發(fā)版蜜自,受保護的分支。
develop(test) -- 是功能最新最全的分支卢佣,也是部署在測試環(huán)境的分支重荠,在我們這也可以部署在debug環(huán)境。
優(yōu)化后的開發(fā)流程:
1.開發(fā)者pull master最新代碼虚茶,拉取feature分支 統(tǒng)一命名風(fēng)格:feature_seckillCoupon_denghuanqing_20181223
2.在feature分支上完成開發(fā)自測后戈鲁,切換到test分支,pull最新代碼嘹叫,把feature分支合并到test分支婆殿,可能會出現(xiàn)沖突,和協(xié)作同事商量解決罩扇。
注意婆芦,非簡單的解決featue a 和test分支沖突,需要商量是feature a還是feature b需要調(diào)整代碼喂饥,假若feature a需要調(diào)整代碼消约,feature a調(diào)整代碼,合并到test分支员帮。feature b 重新操作合并到test分支或粮。
3.通知測試在測試分支測試,這個階段不用關(guān)心發(fā)版進程捞高,除非業(yè)務(wù)互相依賴氯材。bug也在feature分支修改,修復(fù)完成后合并流程參考step2;
4.測試完全通過后棠枉,開發(fā)切換到master分支浓体,pull最新代碼,切換回feature分支辈讶,把master分支合并到feature分支(保證即將發(fā)布的代碼沒沖突)命浴,在gitlab提交合并請求,寫上功能需求點,腳本等生闲,指定項目管理員審核并且合并代碼媳溺。
5.管理員審核代碼,處理(本次版本內(nèi))合并請求碍讯,打tag悬蔽,發(fā)版,走線上驗證流程捉兴。
6.完成功能開發(fā)蝎困。feature可以保留幾周后統(tǒng)一清理,我時常會在功能分支上找一些寫過的代碼倍啥。
7.備注:修改線上的bug重新從master拉去分支或者使用未被污染的feature分支都ok禾乘。
gitlab操作演示
1.保護分支
2.提交合并請求
項目首頁點擊下拉框
3.選擇要把那個分支合并到master
4.填寫本次發(fā)版相關(guān)描述,比對代碼差異虽缕。確認提交后通知相關(guān)權(quán)限用戶始藕。(gitlab同時提供郵件通知)
5.審核&合并代碼