實際項目中如何使用Git做分支管理

1.前言

記得剛工作的時候根本不知道什么是版本管理工具,有一次和別人聊天,人家問你們公司代碼用什么版本管理工具?我說啥是版本管理工具,我們一般用U盤拷貝,然后人家就顧左右而言他了。后來我知道了有個東西叫SVN,后來又知道了還有個東西叫Git。所以說剛畢業(yè)的同學一定要優(yōu)先進入專業(yè)的大公司,就像年輕時候應該去大城市闖兩年一樣,眼界以及你遇到的牛人會大大加快你以后成功的進程。

2.概述

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

3.Git的基本使用方法

關于git的基本教程,強烈建議閱讀廖雪峰老師的Git教程,對初學者非常友好。

4.使用Git管理項目的方式

在實際開發(fā)中如何使用Git沒有一個標準答案,使用方式也是各式各樣,很多基本上都是把Git當SVN來用。下面介紹的是一種經(jīng)過實踐的運行比較良好的管理方式。

4.1 主分支

實際開發(fā)中,一個倉庫(通常只放一個項目)主要存在兩條主分支:master與develop分支。這個兩個分支的生命周期是整個項目周期。就是說,自創(chuàng)建出來就不會刪除,會隨著項目的不斷開發(fā)不斷的往里面添加代碼。master分支是創(chuàng)建git倉庫時自動生成的,隨即我們就會從master分支創(chuàng)建develop分支,如下圖所示。


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

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

通過以上分析可以發(fā)現(xiàn),我們可以使用Git hook 腳本自動發(fā)布發(fā)布新的版本,具體就是每當有代碼從develop分支合并到master分支的時候,腳本就會自動觸發(fā),編譯發(fā)布新的版本。

4.2 支持分支

這些分支都是為了程序員協(xié)同開發(fā),以及應對項目的各種需求而存在的。這些分支都是為了解決某一個具體的問題而設立,當這個問題解決后,代碼會合并回主分支develop或者master后刪除,一般我們會人為分出三種分支。

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


    具體事例可以參考上面王二狗完成登錄注冊功能時的做法。

  • Release branches:這個分支用來分布新版本。
    從develop分支創(chuàng)建,完成后合并回develop與master分支。
    這個分支上可以做一些非常小的bug修復,當然,你也可以禁止在這個分支做任何bug的修復工作,而只做版本發(fā)布的相關操作,例如設置版本號等操作,那樣的話那些發(fā)現(xiàn)的小bug就必須放到下一個版本修復了。如果在這個分支上發(fā)現(xiàn)了大bug,那么也絕對不能在這個分支上改,需要Featrue分支上改,走正常的流程。
    實例:王二狗開發(fā)完了登錄注冊功能后決定發(fā)一個版本V0.1,那么他先從develop分支上創(chuàng)建一個Release 分支release-v0.1,然后二狗在這個分支上把版本號等做了修改。正準備編譯發(fā)布了,項目經(jīng)理說:“二狗啊,你那個登錄框好像向右偏移量1個像素,你可以調(diào)一下嗎?”二狗心中有暗暗罵道:日了個狗,但是。。。你們懂得,功能還的正常改。不過二狗發(fā)現(xiàn)這個bug特別小,對項目其他部分不造成不可預知的問題,所以直接在release分支上改了,然后愉快的發(fā)布了版本1.0.版本上線后,二狗將這個分支分別合并回了develop與master分支,然后刪除了這個分支。

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


    這個分支主要是解決線上版本的緊急bug修復的,例如突然版本V0.1上有一個致命bug,必須修復。那么我們就可以從master 分支上發(fā)布這個版本那個時間點 例如 tag v0.1(一般代碼發(fā)布后會及時在master上打tag),來創(chuàng)建一個 hotfix-v0.1.1的分支,然后在這個分支上改bug,然后發(fā)布新的版本。最后將代碼合并回develop與master分支。
    實例:某天夜里二狗正在和女朋友嘿咻呢,突然項目經(jīng)理打來電話:“二狗啊,線上出了個大問題,大量用戶無法登錄,客服電話已經(jīng)被打爆了,你緊急處理一下”。二狗心中默默罵道:日了個狗,然后就爬起來去改代碼了。二狗先找到master分支上tag v0.1 的地方,然后新建了hotfix-v0.1.1 分支,默默的修bug去了。經(jīng)過一個多小時的奮戰(zhàn),終于修復了,然后二狗改了版本號,發(fā)布了新版本。二狗將這個分支分別合并回了develop與master分支后刪除了這個分支。終于搞定了,回頭看看床上的女票已經(jīng)進入了夢鄉(xiāng),二狗賊心不死,上前挑逗,此刻女票將滿腹怨氣集于一點,使出凌空一腳將其登于床下,隨后甩一枕于二狗,二狗會意,趨客廳,抱枕臥于沙發(fā)。。。

4.3 總結圖

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


5. 總結

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

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,953評論 2 373

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

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