一、Azure-DevOps建議的分支策略(官方推薦)
共識(shí)信息
1.master分支只合入穩(wěn)定代碼,未測(cè)試的代碼不能合入master
2.所有功能開(kāi)發(fā)纽疟,盡可能創(chuàng)建新的特性分支,一個(gè)特性一個(gè)分支(即feature分支,方便merge到多個(gè)不同分支中距淫。我們目前的方式是統(tǒng)一維護(hù)dev分支,特性分支被弱化了)
3.分支用途不同婶希,承擔(dān)管理員角色的人員也不同榕暇,分為配置人員、項(xiàng)目經(jīng)理、以及開(kāi)發(fā)人員彤枢。見(jiàn)上圖最左側(cè)的的人員信息
二狰晚、簡(jiǎn)化版的分支策略(適合我們的)
說(shuō)明
1.master是穩(wěn)定分支
2.test是測(cè)試分支,專門用來(lái)提測(cè)
3.test分支經(jīng)過(guò)測(cè)試后才能合入到master
4.dev/feature分支最后都合入到test上提測(cè)缴啡,提測(cè)通過(guò)后要打tag
5.dev/feature分支需要經(jīng)過(guò)評(píng)審和門禁才能合入test分支
6.dev/feature分支必須在test發(fā)生變更后及時(shí)更新
7.最后需要merge到master分支的分支(如文中的test分支)壁晒,都是需要能直接提測(cè),且必須由管理員(確切說(shuō)應(yīng)該是項(xiàng)目經(jīng)理)管控權(quán)限和合入節(jié)奏
8.緊急補(bǔ)丁分支业栅,是可以直接提測(cè)秒咐,不需要合入到test上提測(cè),合入后需要打tag
9.常用的分支就4個(gè)碘裕,master/test/dev/hotfix
三携取、分支策略實(shí)施前的準(zhǔn)備工作
1.先試運(yùn)行,找到適合自己項(xiàng)目運(yùn)作流程的最佳實(shí)踐帮孔,等完善后再形成項(xiàng)目約定雷滋,包括分支策略及管理員角色
2.各個(gè)互相依賴的項(xiàng)目間的分支策略要一致,便于節(jié)約后期溝通成本文兢,以及快速制定編譯策略
3.制定tag的命名規(guī)則(見(jiàn)tag命名規(guī)范 - 簡(jiǎn)書(shū) (jianshu.com)
)晤斩,各個(gè)互相依賴的項(xiàng)目間也要保持一致,原因同上
四禽作、常見(jiàn)問(wèn)題
【問(wèn)題】特性分支存在的意義尸昧?
答:目前我們正在使用的dev分支,替代了特性分支的功能旷偿,所以先說(shuō)下dev分支烹俗。
從TFS的集中式開(kāi)發(fā)方式切換到git的多分支上,我們的項(xiàng)目管理方式延續(xù)了TFS集中式開(kāi)發(fā)和交付的慣性萍程,所有的功能提測(cè)/交付時(shí)間相同幢妄,所以一個(gè)dev分支支撐全部的功能,目前看還可行茫负。這樣看蕉鸳,dev分支、test分支忍法,目前實(shí)際上就約等于master分支潮尝,是不穩(wěn)定的master,它既包含了全部的饿序、已經(jīng)穩(wěn)定的功能勉失,也包含了最新的、不穩(wěn)定的功能原探。
但實(shí)際上乱凿,更靈活的用法是顽素,用特性分支替代dev分支。特性分支適用于徒蟆,每個(gè)特性有自己獨(dú)立的提測(cè)/交付時(shí)間胁出,或者無(wú)法集中式提測(cè)和交付的情況(大型項(xiàng)目的團(tuán)隊(duì)更多,開(kāi)發(fā)節(jié)奏相互獨(dú)立)段审,因此特性分支更為靈活全蝶。例如,設(shè)備管理可以拉取一個(gè)設(shè)備特性分支戚哎,質(zhì)量管理可以拉取一個(gè)質(zhì)量特性分支裸诽,兩個(gè)分支根據(jù)自己的交付時(shí)間分別提測(cè)。這是特性分支的典型應(yīng)用場(chǎng)景型凳,也是它的價(jià)值所在丈冬。
特性分支是臨時(shí)分支,特性提測(cè)后甘畅,就可以刪除了埂蕊。這樣,長(zhǎng)期分支疏唾,就只有test分支和master分支了蓄氧。
特性分支還有一個(gè)應(yīng)用場(chǎng)景是,一個(gè)獨(dú)立的功能槐脏,既可以完整合入產(chǎn)品化的master分支喉童,也可以完整的合入其他非產(chǎn)品話的項(xiàng)目分支上。如果使用dev的話還需要從dev中將該功能的代碼挑選出來(lái)合入其他分支顿天。
【問(wèn)題】可以通過(guò)test或dev分支的tag標(biāo)簽堂氯,獲取到不同時(shí)期的代碼,為什么還需要master分支牌废?
答:待補(bǔ)充
【問(wèn)題】存在需求沖突問(wèn)題咽白,git怎么解決和適配?
答:需求沖突的問(wèn)題鸟缕,git本身無(wú)法解決晶框。git是靈活的代碼管理工具,提供多種方案解決常見(jiàn)問(wèn)題懂从,提高開(kāi)發(fā)效率授段,但是如何利用git,需要人為設(shè)計(jì)番甩。
產(chǎn)品設(shè)計(jì)階段就需要考慮如何解決需求沖突這個(gè)問(wèn)題畴蒲。產(chǎn)品開(kāi)發(fā)要避免需求沖突,或者通過(guò)開(kāi)關(guān)方式處理沖突对室;項(xiàng)目開(kāi)發(fā)可同時(shí)保留多個(gè)項(xiàng)目的master/test/dev分支模燥,后期同時(shí)維護(hù)多個(gè)項(xiàng)目分支
【問(wèn)題】分支是否要繼續(xù)存留?什么情況下可以刪除掩宜?
答:臨時(shí)分支用完即可刪除
【問(wèn)題】tag什么時(shí)候打蔫骂?什么場(chǎng)景下使用?
答:后期如果需要該快照下的代碼牺汤,即可打tag辽旋,確定無(wú)用的tag也可以及時(shí)刪除。一般是整塊的功能合入master的時(shí)候檐迟,或者需要標(biāo)記重要的里程碑節(jié)點(diǎn)時(shí)补胚,可以打tag,方便后期獲取該快照追迟。
五溶其、相關(guān)鏈接
tag命名規(guī)范 - 簡(jiǎn)書(shū) (jianshu.com)
git常用命令 - 簡(jiǎn)書(shū) (jianshu.com)