實(shí)際項(xiàng)目中如何使用Git做分支管理

1.前言

記得剛工作的時(shí)候根本不知道什么是版本管理工具抽诉,有一次和別人聊天冕广,人家問(wèn)你們公司代碼用什么版本管理工具叠赐?我說(shuō)啥是版本管理工具,我們一般用U盤拷貝五鲫,然后人家就顧左右而言他了溺职。后來(lái)我知道了有個(gè)東西叫SVN,后來(lái)又知道了還有個(gè)東西叫Git。所以說(shuō)剛畢業(yè)的同學(xué)一定要優(yōu)先進(jìn)入專業(yè)的大公司位喂,就像年輕時(shí)候應(yīng)該去大城市闖兩年一樣浪耘,眼界以及你遇到的牛人會(huì)大大加快你以后成功的進(jìn)程。

2.概述

本文主要是介紹一種在具體實(shí)踐中使用Git來(lái)管理項(xiàng)目開發(fā)的一種成功的方式忆某,其實(shí)主要思想來(lái)源于這篇文章《 A successful Git branching model》点待,網(wǎng)上大部分教程都是致敬這篇文章。

3.Git的基本使用方法

關(guān)于git的基本教程弃舒,強(qiáng)烈建議閱讀廖雪峰老師的Git教程癞埠,對(duì)初學(xué)者非常友好。

4.使用Git管理項(xiàng)目的方式

在實(shí)際開發(fā)中如何使用Git沒有一個(gè)標(biāo)準(zhǔn)答案聋呢,使用方式也是各式各樣苗踪,很多基本上都是把Git當(dāng)SVN來(lái)用。下面介紹的是一種經(jīng)過(guò)實(shí)踐的運(yùn)行比較良好的管理方式削锰。

4.1 主分支

實(shí)際開發(fā)中通铲,一個(gè)倉(cāng)庫(kù)(通常只放一個(gè)項(xiàng)目)主要存在兩條主分支:master與develop分支。這個(gè)兩個(gè)分支的生命周期是整個(gè)項(xiàng)目周期器贩。就是說(shuō)颅夺,自創(chuàng)建出來(lái)就不會(huì)刪除,會(huì)隨著項(xiàng)目的不斷開發(fā)不斷的往里面添加代碼蛹稍。master分支是創(chuàng)建git倉(cāng)庫(kù)時(shí)自動(dòng)生成的吧黄,隨即我們就會(huì)從master分支創(chuàng)建develop分支,如下圖所示唆姐。


image.png
  • master:這個(gè)分支最為穩(wěn)定拗慨,這個(gè)分支代表項(xiàng)目處于可發(fā)布的狀態(tài)。
    例如王二狗向master分支合并了代碼,那就意味著王二狗完成了此項(xiàng)目的一個(gè)待發(fā)布的版本赵抢,項(xiàng)目經(jīng)理可以認(rèn)為剧蹂,此項(xiàng)目已經(jīng)準(zhǔn)備好發(fā)布新版本了。所以master分支不是隨隨便便就可以簽入代碼的地方烦却,只有計(jì)劃發(fā)布的版本功能在develop分支上全部完成宠叼,而且測(cè)試沒有問(wèn)題了才會(huì)合并到master上。

  • develop:作為開發(fā)的分支短绸,平行于master分支车吹。
    例如王二狗要開發(fā)一個(gè)注冊(cè)功能,那么他就會(huì)從develop分支上創(chuàng)建一個(gè)feature分支 fb-register(后面講)醋闭,在fb-register分支上將注冊(cè)功能完成后窄驹,將代碼合并到develop分支上。這個(gè)fb-register就完成了它的使命证逻,可以刪除了乐埠。項(xiàng)目經(jīng)理看王二狗效率很高啊,于是:“二狗你順帶把登錄功能也做了吧”囚企。二狗心中暗暗罵道:日了個(gè)狗的丈咐,但是任務(wù)還的正常做,二狗就會(huì)重復(fù)上面的步驟:從develop分支上新創(chuàng)建一個(gè)名為fb-login的分支龙宏,喝杯咖啡繼續(xù)開發(fā)棵逊,1個(gè)小時(shí)后登錄功能寫好了,二狗又會(huì)將這個(gè)分支的代碼合并回develop分支后將其刪除银酗。

通過(guò)以上分析可以發(fā)現(xiàn)辆影,我們可以使用Git hook 腳本自動(dòng)發(fā)布發(fā)布新的版本,具體就是每當(dāng)有代碼從develop分支合并到master分支的時(shí)候黍特,腳本就會(huì)自動(dòng)觸發(fā)蛙讥,編譯發(fā)布新的版本。

4.2 支持分支

這些分支都是為了程序員協(xié)同開發(fā)灭衷,以及應(yīng)對(duì)項(xiàng)目的各種需求而存在的次慢。這些分支都是為了解決某一個(gè)具體的問(wèn)題而設(shè)立,當(dāng)這個(gè)問(wèn)題解決后翔曲,代碼會(huì)合并回主分支develop或者master后刪除迫像,一般我們會(huì)人為分出三種分支。

  • Feature branches:這種分支和我們程序員日常開發(fā)最為密切瞳遍,稱作功能分支闻妓。
    必須從develop分支創(chuàng)建,完成后合并回develop分支
    如下圖所示傅蹂。


    具體事例可以參考上面王二狗完成登錄注冊(cè)功能時(shí)的做法纷闺。

  • Release branches:這個(gè)分支用來(lái)分布新版本。
    從develop分支創(chuàng)建份蝴,完成后合并回develop與master分支犁功。
    這個(gè)分支上可以做一些非常小的bug修復(fù),當(dāng)然婚夫,你也可以禁止在這個(gè)分支做任何bug的修復(fù)工作浸卦,而只做版本發(fā)布的相關(guān)操作,例如設(shè)置版本號(hào)等操作案糙,那樣的話那些發(fā)現(xiàn)的小bug就必須放到下一個(gè)版本修復(fù)了限嫌。如果在這個(gè)分支上發(fā)現(xiàn)了大bug,那么也絕對(duì)不能在這個(gè)分支上改时捌,需要Featrue分支上改怒医,走正常的流程。
    實(shí)例:王二狗開發(fā)完了登錄注冊(cè)功能后決定發(fā)一個(gè)版本V0.1奢讨,那么他先從develop分支上創(chuàng)建一個(gè)Release 分支release-v0.1稚叹,然后二狗在這個(gè)分支上把版本號(hào)等做了修改。正準(zhǔn)備編譯發(fā)布了拿诸,項(xiàng)目經(jīng)理說(shuō):“二狗啊扒袖,你那個(gè)登錄框好像向右偏移量1個(gè)像素,你可以調(diào)一下嗎亩码?”二狗心中有暗暗罵道:日了個(gè)狗季率,但是。描沟。飒泻。你們懂得,功能還的正常改啊掏。不過(guò)二狗發(fā)現(xiàn)這個(gè)bug特別小蠢络,對(duì)項(xiàng)目其他部分不造成不可預(yù)知的問(wèn)題,所以直接在release分支上改了迟蜜,然后愉快的發(fā)布了版本1.0.版本上線后刹孔,二狗將這個(gè)分支分別合并回了develop與master分支,然后刪除了這個(gè)分支娜睛。

  • Hotfix branches:這個(gè)分支主要為修復(fù)線上特別緊急的bug準(zhǔn)備的髓霞。
    必須從master分支創(chuàng)建,完成后合并回develop與master分支畦戒。
    如下圖所示:


    這個(gè)分支主要是解決線上版本的緊急bug修復(fù)的方库,例如突然版本V0.1上有一個(gè)致命bug,必須修復(fù)障斋。那么我們就可以從master 分支上發(fā)布這個(gè)版本那個(gè)時(shí)間點(diǎn) 例如 tag v0.1(一般代碼發(fā)布后會(huì)及時(shí)在master上打tag)纵潦,來(lái)創(chuàng)建一個(gè) hotfix-v0.1.1的分支徐鹤,然后在這個(gè)分支上改bug,然后發(fā)布新的版本邀层。最后將代碼合并回develop與master分支返敬。
    實(shí)例:某天夜里二狗正在和女朋友嘿咻呢,突然項(xiàng)目經(jīng)理打來(lái)電話:“二狗啊寥院,線上出了個(gè)大問(wèn)題劲赠,大量用戶無(wú)法登錄,客服電話已經(jīng)被打爆了秸谢,你緊急處理一下”凛澎。二狗心中默默罵道:日了個(gè)狗,然后就爬起來(lái)去改代碼了估蹄。二狗先找到master分支上tag v0.1 的地方塑煎,然后新建了hotfix-v0.1.1 分支,默默的修bug去了臭蚁。經(jīng)過(guò)一個(gè)多小時(shí)的奮戰(zhàn)轧叽,終于修復(fù)了,然后二狗改了版本號(hào)刊棕,發(fā)布了新版本炭晒。二狗將這個(gè)分支分別合并回了develop與master分支后刪除了這個(gè)分支。終于搞定了甥角,回頭看看床上的女票已經(jīng)進(jìn)入了夢(mèng)鄉(xiāng)网严,二狗賊心不死,上前挑逗嗤无,此刻女票將滿腹怨氣集于一點(diǎn)震束,使出凌空一腳將其登于床下,隨后甩一枕于二狗当犯,二狗會(huì)意垢村,趨客廳,抱枕臥于沙發(fā)嚎卫。嘉栓。。

4.3 總結(jié)圖

上面的講解最后匯成一張圖


5. 總結(jié)

希望廣大程序員不要有王二狗的悲慘遭遇拓诸,最后希望廣大“王二狗媳婦”可以理解廣大“王二狗”的苦衷侵佃。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市奠支,隨后出現(xiàn)的幾起案子馋辈,更是在濱河造成了極大的恐慌,老刑警劉巖倍谜,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迈螟,死亡現(xiàn)場(chǎng)離奇詭異叉抡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)答毫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門卜壕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)飒房,“玉大人糊昙,你說(shuō)我怎么就攤上這事朝捆。” “怎么了蚕脏?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)侦锯。 經(jīng)常有香客問(wèn)我驼鞭,道長(zhǎng),這世上最難降的妖魔是什么尺碰? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任挣棕,我火速辦了婚禮,結(jié)果婚禮上亲桥,老公的妹妹穿的比我還像新娘洛心。我一直安慰自己,他們只是感情好题篷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布词身。 她就那樣靜靜地躺著,像睡著了一般番枚。 火紅的嫁衣襯著肌膚如雪法严。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天葫笼,我揣著相機(jī)與錄音深啤,去河邊找鬼。 笑死路星,一個(gè)胖子當(dāng)著我的面吹牛溯街,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播洋丐,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼苫幢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了垫挨?” 一聲冷哼從身側(cè)響起韩肝,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎九榔,沒想到半個(gè)月后哀峻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涡相,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年剩蟀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了催蝗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡育特,死狀恐怖丙号,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缰冤,我是刑警寧澤犬缨,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站棉浸,受9級(jí)特大地震影響怀薛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜迷郑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一枝恋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嗡害,春花似錦焚碌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至抑堡,卻和暖如春摆出,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背首妖。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工偎漫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人有缆。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓象踊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親棚壁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子杯矩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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

  • Git 倉(cāng)庫(kù)申請(qǐng)流程 1. 開發(fā)主管向Git 管理員提交Git 倉(cāng)庫(kù)申請(qǐng)【郵件:發(fā)送給Git 管理員,抄送給項(xiàng)目經(jīng)...
    騷包霸天虎閱讀 2,078評(píng)論 0 0
  • 聲明:這篇文章來(lái)源于廖雪峰老師的官方網(wǎng)站袖外,我僅僅是作為學(xué)習(xí)之用 Git簡(jiǎn)介 Git是什么史隆? Git是目前世界上最先...
    橫渡閱讀 3,952評(píng)論 3 27
  • 這篇博文是自己在學(xué)習(xí)git過(guò)程中的思考總結(jié)。本文僅僅代表個(gè)人的看法曼验,如有不妥地方還請(qǐng)本文文末留言泌射。 ?? 原文鏈接g...
    Ming_Hu閱讀 1,069評(píng)論 4 18
  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,656評(píng)論 9 163
  • 本文通過(guò)以下四個(gè)部分講解git的使用 Git配置 Git使用場(chǎng)景 Git分支管理方法 常用git命令 在講解...
    z小牛閱讀 1,657評(píng)論 0 3