Git 工作流的一些經(jīng)驗分享

筆者使用git有一段時間了,踩過不少坑堰燎,這里分享下我在git工作流方面的一些經(jīng)驗聚磺。

什么是Git工作流?

Git工作流你可以理解為工作中團隊成員遵守的一種代碼管理方案聂沙,在Git中有以下幾種工作流方案作為方案指導:

  • 集中式工作流
  • 功能開發(fā)工作流
  • Gitflow工作流
  • Forking工作流

下面針對性說下每個工作流可能使用到的場景和適用性:

集中式工作流

集中式工作流 | center

這種工作方式跟svn類似秆麸,它只有一個master分支,開發(fā)者會先把遠程的倉庫克隆到本地逐纬,之后的修改和提交都在本地操作,直到在某個合適的時間點將本地的代碼合入到遠程master削樊。這種工作流比較適合小團隊豁生,因為小團隊可能不會太多的協(xié)作和合流的動作兔毒。

功能開發(fā)工作流

功能開發(fā)工作流

這種工作流關(guān)注功能開發(fā),不直接往master提交代碼保證它是穩(wěn)定并且干凈的甸箱,而是從master拉取feature分支進行功能開發(fā)育叁,團隊成員根據(jù)分工拉取不同的功能分支來進行不同的功能開發(fā),這樣就可以完全隔離開每個人的工作芍殖。當功能開發(fā)完成后豪嗽,會向master分支發(fā)起Pull Request,只有審核通過的代碼才真正允許合入master豌骏,這樣就加強了團隊成員之間的代碼交流龟梦,也就是我們常說的Code Review。

Gitflow工作流

Gitflow工作流

這個工作流其實也是我們團隊采用的工作流窃躲,這也是很多團隊會采用的工作流计贰,它會相對復雜一點,但它非常適合用來管理大型項目的發(fā)布和維護蒂窒,后面筆者也會詳細講下這一塊躁倒。貫穿整個開發(fā)周期,master和develop分支是一直存在的洒琢,master分支可以被視為穩(wěn)定的分支秧秉,而develop分支是相對穩(wěn)定的分支,特性開發(fā)會在feature分支上進行衰抑,發(fā)布會在release分支上進行象迎,而bug修復則會在hotfix分支上進行。筆者也是花了不少時間才熟練掌握整個工作流停士,期間遇到不少坑挖帘,后面會跟大家分享下。

Forking工作流

Forking工作流

Forking工作流對于開源項目貢獻者一定不陌生了恋技,它有一個公開的中央倉庫拇舀,其他貢獻者可以Fork(克隆)這個倉庫作為你自己的私有倉庫蜻底,開源項目維護者可以直接往中央倉庫push代碼骄崩,而代碼貢獻者只能將代碼push到自己的私有倉庫,只有項目維護者接受代碼貢獻者往中央倉庫發(fā)起的pull request才會真正合入薄辅。

小結(jié)一下

上面已經(jīng)大致講了在git當中的四種比較常見的工作流要拂,都是需要開發(fā)者去實踐理解的。

關(guān)于git工作流站楚,只有選用最合適自己團隊的工作流才能有效的提高開發(fā)效率脱惰,上面提到的一些工作流模式都有各自的適用場景,如何選用適合自己團隊的工作流得結(jié)合團隊成員的實際情況窿春,看團隊成員對于工作流的理解程度拉一,還有對于工作流的執(zhí)行程度采盒。

我們團隊的一些實踐

現(xiàn)在講下我們團隊針對Gitflow的一些實踐:

master分支

  • 主分支
  • 保持穩(wěn)定
  • 不允許直接往這個分支提交代碼,只允許往這個分支發(fā)起merge request
  • 只允許release分支和hotfix分支進行合流

develop分支

  • 開發(fā)分支
  • 相對穩(wěn)定的分支
  • 用于日常開發(fā)蔚润,包括代碼優(yōu)化磅氨、功能性開發(fā)

feature分支

  • 特性分支
  • 從develop分支拉取,用于下個迭代版本的功能特性開發(fā)
  • 功能開發(fā)完畢合并到develop分支

release分支

  • 發(fā)布分支
  • 從develop分支拉取
  • 用于回歸測試嫡纠,bug修復
  • 發(fā)布完成后打tag并合入master和develop

hotfix分支

  • 熱更新分支
  • 從develop分支拉取
  • 用于緊急修復上線版本的問題
  • 修復后打tag并合入master和develop

大家可能會發(fā)現(xiàn)我們這個跟標準的Gitflow工作流有些差別烦租,其實也沒有什么標準不標準的,前面說到要結(jié)合團隊的實際情況除盏,我們團隊對于目前所采用的工作方式都是達成共識的叉橱,所以有一些差異并沒有關(guān)系。

說了這么久痴颊,還沒有一句git命令赏迟,那就讓大家感受一下吧(感謝Bugly小色熊整理):

1). 首先將遠程代碼拉取到本地

    git clone xxx
    git checkout -b develop origin/develop

2).新建feature分支

    git checkout -b feature 

3).多人在feature上開發(fā),如果中途需要將develop的變更合入feature蠢棱,所有人需要將本地的代碼變更提交到遠程

    git fetch origin 
    git rebase origin/feature
    git push origin feature

然后由feature負責人rebase develop分支锌杀,刪除原來feature分支,重新新建feature分支泻仙;

    git fetch origin
    git rebase origin/feature
    git rebase develop
    git push origin :feature
    git push origin feature

這樣可以保證feature保持線性變更糕再;

4).feature開發(fā)完成后,所有人需要將本地的代碼變更提交到遠程

    git fetch origin 
    git rebase origin/feature
    git push origin feature

然后由feature負責人rebase develop分支玉转,然后將feature分支合入develop突想,刪除feature;

    git fetch origin
    git rebase origin/feature
    git rebase develop
    git checkout develop
    git merge feature
    git push origin :feature

這樣可以保證develop保持線性變更究抓,各feature的變更完整可追溯猾担;
5).合入feature后拉出對應(yīng)的release/feature分支,后續(xù)bug修復在release/feature上

    git checkout develop
    git checkout -b release/feature

release/feature分支的同步合并與feature分支相同
6).release/feature分支bug修復完成后刺下,拉取對應(yīng)的tag推送遠程進行發(fā)布

    git tag -a v1.0 -m 'feature發(fā)布'
    git push origin v1.0

之后將release/feature合入develop分支绑嘹,然后刪除

    git rebase develop
    git checkout develop
    git merge release/feature
    git push origin :release/feature

7).發(fā)布完成后將release合入master分支,保證master為最新穩(wěn)定版本(實際操作為發(fā)起merge request)

總結(jié)

本篇文章主要針對筆者工作中對于git工作流的一些理解和實踐橘茉,目前我們團隊也是嚴格按照這樣的工作流來完成日常的開發(fā)工作工腋,一個讓團隊成員認可并且有效的工作流才是最適合我們的工作流,任何規(guī)則不是為了限制我們思考畅卓,而是為了讓工作更加高效有序擅腰,盡量減少人為的失誤。git是一個博大精深的東西翁潘,筆者也是不斷在實際應(yīng)用中去理解它趁冈,任何一門技術(shù)的學習也是這樣,就像程序員常用來裝逼的一首詩:

紙上得來終覺淺拜马,絕知此事要躬行渗勘。

參考資料:http://blog.jobbole.com/76847/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末矾飞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子呀邢,更是在濱河造成了極大的恐慌,老刑警劉巖豹绪,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件价淌,死亡現(xiàn)場離奇詭異,居然都是意外死亡瞒津,警方通過查閱死者的電腦和手機蝉衣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巷蚪,“玉大人病毡,你說我怎么就攤上這事∑ò兀” “怎么了啦膜?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長淌喻。 經(jīng)常有香客問我僧家,道長,這世上最難降的妖魔是什么裸删? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任八拱,我火速辦了婚禮,結(jié)果婚禮上涯塔,老公的妹妹穿的比我還像新娘肌稻。我一直安慰自己,他們只是感情好匕荸,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布爹谭。 她就那樣靜靜地躺著,像睡著了一般每聪。 火紅的嫁衣襯著肌膚如雪旦棉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天药薯,我揣著相機與錄音绑洛,去河邊找鬼。 笑死童本,一個胖子當著我的面吹牛真屯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播穷娱,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼绑蔫,長吁一口氣:“原來是場噩夢啊……” “哼运沦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起配深,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤携添,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后篓叶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烈掠,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年缸托,在試婚紗的時候發(fā)現(xiàn)自己被綠了左敌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡俐镐,死狀恐怖矫限,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情佩抹,我是刑警寧澤叼风,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站棍苹,受9級特大地震影響咬扇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜廊勃,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一懈贺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坡垫,春花似錦梭灿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至溉卓,卻和暖如春皮迟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桑寨。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工伏尼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尉尾。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓爆阶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子辨图,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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

  • Git 工作流的一些經(jīng)驗分享原創(chuàng) 2017-02-16 巫山老妖小巫技術(shù)博客 筆者使用git有一段時間了班套,踩過不...
    Karma1026閱讀 413評論 0 1
  • 多種多樣的工作流使得在項目中實施Git時變得難以選擇。這份教程提供了一個出發(fā)點故河,調(diào)查企業(yè)團隊最常見的Git工作流吱韭。...
    JSErik閱讀 4,372評論 2 8
  • Python 2.7IDE Pycharm 5.0.3 至于Selenium等環(huán)境配置,則請看 Python+Se...
    mrlevo520閱讀 1,842評論 5 10
  • 當后悔成為生活的一部分 遺憾也順道來幫襯 沒有人學習過拯救 只好一邊將就 一邊規(guī)勸自己 放下在意的根 然后模仿周遭...
    段童閱讀 671評論 0 2
  • 說話刻薄的人鱼的,要不是情商低杉女,要不就是心不善。
    XYZ0閱讀 188評論 0 0