分支策略所見

通俗的說,任何分支策略都可以在一個團隊中執(zhí)行下去汰现,無非使起來好用或不好用挂谍。什么好的策略呢?我認為瞎饲,好的策略有以下幾個特點:

  • 保證代碼安全口叙;
  • 版本管理有序;
  • 程序員無感知嗅战;
    前兩點往往是我們所追求的核心目標妄田,通過分支管理,將生產(chǎn)代碼和開發(fā)代碼甚至測試階段的代碼區(qū)別開,保證各個環(huán)境的應(yīng)用獨立疟呐。至于程序員無感知脚曾,只能說是一個美好的愿望,意思是分支管理清晰萨醒,操作簡潔斟珊。其實一個團隊的分支策略會隨著團隊業(yè)務(wù)苇倡、規(guī)模而變化富纸,這里介紹幾種分支策略,讀者可根據(jù)實際情況運用旨椒。

主干分支策略

所謂主干分支策略晓褪,指的是所有開發(fā)人員共享同一個trunk進行開發(fā),當需要發(fā)布的時候综慎,可以基于現(xiàn)有的trunk拉出一個新的release分支涣仿,進行測試和發(fā)布。當然這里會有一個問題示惊,共享分支開發(fā)的前提下好港,拉取分支可能導(dǎo)致無需上線的代碼被拉到release分支,所以這個時候米罚,可能需要通過cherry-pick從主干上挑取需要上線的commit钧汹。


主干分支策略

這樣做的優(yōu)點很明顯,分支結(jié)構(gòu)簡潔录择,但是一旦要上線的時候拔莱,就需要相關(guān)的開發(fā)人員更加仔細,避免多余代碼帶上生產(chǎn)環(huán)境隘竭。這里多說一句塘秦,網(wǎng)上其他文章有提到“主干分支策略會減少沖突的發(fā)生”,我認為可以這么說动看,解釋一下尊剔,這里我也拉出一個分支說說沖突發(fā)生的原因:不同的提交對同一文件的同一部分(我理解為同一行)進行了不同的修改,則會產(chǎn)生沖突菱皆。如果同一文件的不同部分修改了赋兵,或者同一文件同一部分修改的內(nèi)容一樣,也不會產(chǎn)生沖突搔预。


文件沖突
拿上圖為例霹期,分支1、分支2拉取的base file的第一行都是"aaa"拯田,然而它們各自進行了修改且內(nèi)容不同("ddd"历造,"eee")這樣一來,branch 1如果先提交,它是正常的吭产,而branch 2 提交時侣监,會產(chǎn)生沖突,因為它本以為改的是"aaa"->"eee"臣淤,卻發(fā)現(xiàn)它將要改的是"ddd"->"eee"橄霉,故而產(chǎn)生沖突。主干分支策略邑蒋,天然的決定了trunk上的代碼是當前能拿到的相對最新的代碼姓蜂,就像上文提到的branch 1的變更,雖然沒上線医吊,但是可能已經(jīng)上了trunck分支钱慢,這樣用戶如果從master上拉base file改造成branch 2就會造成沖突,而拉取trunk的話就不會卿堂。

git flow(最常見的分支策略)

網(wǎng)絡(luò)上有文章介紹了常見的git flow/github flow/gitlab flow等分支策略束莫,其中g(shù)ithub flow多適用于組織性不強的開源項目開發(fā)。git flow和gitlab flow可以整在一起講講草描。其實這種git flow方式應(yīng)該是市面上最具共識的開發(fā)方式览绿,扒一張優(yōu)秀的圖:


git flow

朋友先別慌,這圖很好理解穗慕,最上面分了5個分支饿敲,其中兩粗三細,意味著develop和master是兩個常備分支揍诽,而feature branch诀蓉,release branch和hotfixes是協(xié)助分支,也就是說暑脆,粗的是一直都在的渠啤,而且不會變來變?nèi)ィ毜目赡芤驗閳鼍疤砺稹㈤_發(fā)人數(shù)沥曹、線上bug數(shù)而增多或減少。
開發(fā)人員的feature branch來自于develop branch碟联,每當develop branch達到某個穩(wěn)定時期妓美,或者團隊的迭代周期一到,develop上的代碼會發(fā)布到release branch進行測試鲤孵,一旦測出有問題壶栋,可以直接在release branch做bug fix,當然規(guī)范起見普监,也可以在相應(yīng)的feature branch上修改了贵试,一層層傳遞到release branch琉兜。當一切測試通過,release branch發(fā)布到master毙玻。
當然這個過程中會有一些變通豌蟋,我們可以把develop和release branch都看做測試分支,也就是說桑滩,當我們開發(fā)完梧疲,會經(jīng)歷兩個環(huán)境的測試,然后上線运准。這樣一說是不是跟實際聯(lián)系的更緊了幌氮。無論怎么變換,這種方式的特點在于:

  1. feature branch由developer產(chǎn)生戳吝,保證了開發(fā)人員的基礎(chǔ)版本是當前最新的版本(developer上的代碼往往是已經(jīng)提測的代碼)浩销,最大程度的避免沖突贯涎,上文已解釋听哭。
  2. 代碼在分支之間一層層的merge,直到發(fā)布塘雳,這要做的好處是通過機制陆盘,減少了誤操作,我們當然會對線上安全格外看中败明,release branch測試通過的代碼merge到master隘马,操作簡便,不易出錯妻顶。
    是不是怎么看怎么好酸员?git flow的弊端也正是由這兩個特點產(chǎn)生的。對于團隊迭代嚴格掌握讳嘱,各個項目節(jié)點嚴格遵守的團隊幔嗦,這樣的策略是沒有問題的,但是現(xiàn)實當中也不免有很多小快靈的團隊沥潭。


    git拉取代碼

    這個圖表達的意思是小王和小李都從develop分支拉取代碼邀泉,小王先拉,也先提交钝鸽;小李在小王提交后拉取汇恤,開發(fā)完成之后,小李也提交到develop拔恰。這時候測試人員宣布因谎,小李的可以上線,小王的得等等颜懊〔撇恚可這時候阱穗,小李的提交可以直接merge到release分支么?不行使鹅!小李的提交中帶有小王還未通過測試的提交揪阶。粗暴的上線不可以,只有cherry-pick患朱,可怕的是鲁僚,如果小李用到了小王的部分代碼,單純的cherry-pick可能還不能解決問題裁厅。所以從develop上拉取feature branch和層層merge對于小快靈或者嚴格迭代制度的團隊不一定適用冰沙。

基于feature branch的策略

其實也就是針對上述策略的不足之處,進行針對性的改良执虹,分支結(jié)構(gòu)沒什么變化拓挥,特別之處兩點:

  1. feature branch來自于master而非develop,這樣一來袋励,都是基于當前的生產(chǎn)版本進行的開發(fā)侥啤,并行開發(fā)的分支互補影響上線;
  2. 所有發(fā)布分支(develop, release, master)的部署都和feature branch進行合并茬故,而非層層遞進合并盖灸;這樣做的好處在于,代碼發(fā)布指哪打哪磺芭,不會混帶著無關(guān)代碼赁炎。
    當然,這樣做也有相應(yīng)的弊端钾腺,代碼沖突出現(xiàn)的機率比git flow要大徙垫,另外由于分支不是層層遞進的發(fā)布,相當于人的權(quán)利更大(因為都是合各自的feature branch)放棒,發(fā)布安全需要人員的素質(zhì)和自覺姻报。

以上三種分支策略已經(jīng)介紹完畢,還是那句話哨查,沒有分支策略適用于所有項目或者一個項目的所有階段逗抑。所以我建議的分支策略是:酌情考慮,不行就換寒亥。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邮府,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子溉奕,更是在濱河造成了極大的恐慌褂傀,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件加勤,死亡現(xiàn)場離奇詭異仙辟,居然都是意外死亡同波,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門叠国,熙熙樓的掌柜王于貴愁眉苦臉地迎上來未檩,“玉大人,你說我怎么就攤上這事粟焊≡┙疲” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵项棠,是天一觀的道長悲雳。 經(jīng)常有香客問我,道長香追,這世上最難降的妖魔是什么合瓢? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮透典,結(jié)果婚禮上晴楔,老公的妹妹穿的比我還像新娘。我一直安慰自己掷匠,他們只是感情好滥崩,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布岖圈。 她就那樣靜靜地躺著讹语,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜂科。 梳的紋絲不亂的頭發(fā)上顽决,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機與錄音导匣,去河邊找鬼才菠。 笑死,一個胖子當著我的面吹牛贡定,可吹牛的內(nèi)容都是我干的赋访。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缓待,長吁一口氣:“原來是場噩夢啊……” “哼蚓耽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起旋炒,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤步悠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瘫镇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鼎兽,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡答姥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了谚咬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹦付。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖择卦,靈堂內(nèi)的尸體忽然破棺而出睁壁,到底是詐尸還是另有隱情,我是刑警寧澤互捌,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布潘明,位于F島的核電站,受9級特大地震影響秕噪,放射性物質(zhì)發(fā)生泄漏钳降。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一腌巾、第九天 我趴在偏房一處隱蔽的房頂上張望遂填。 院中可真熱鬧,春花似錦澈蝙、人聲如沸吓坚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽礁击。三九已至,卻和暖如春逗载,著一層夾襖步出監(jiān)牢的瞬間哆窿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工厉斟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挚躯,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓擦秽,卻偏偏與公主長得像码荔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子感挥,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 最近在看git的集成缩搅,下面這個文章寫的還不錯,轉(zhuǎn)載下:https://sunnycoding.cn/2019/03...
    流浪山人閱讀 1,464評論 0 0
  • [轉(zhuǎn)載]https://www.ibm.com/developerworks/cn/java/j-lo-git-m...
    張志_koen_zhang閱讀 2,335評論 0 2
  • Git 三大特色链快,分支誉己,暫存區(qū),工作流域蜗。工作流不涉及任何命令巨双,通俗一點的稱呼就是分支策略噪猾。 何謂分支策略 Git的...
    CC先生之簡書閱讀 2,282評論 0 3
  • git branch的管理策略網(wǎng)上有不上文章,流傳比較廣泛的應(yīng)該是阮一峰的Git分支管理策略筑累,不過個人感覺這個策略...
    睡著的時光閱讀 1,056評論 0 0
  • Git FLow是什么 Git Flow是構(gòu)建在Git之上的一個組織軟件開發(fā)活動的模型袱蜡,也是軟件開發(fā)過程中一種成功...
    華枯榮閱讀 2,251評論 2 10