轉(zhuǎn)載(Git 工作流的一些經(jīng)驗(yàn)分享)

Git 工作流的一些經(jīng)驗(yàn)分享
原創(chuàng) 2017-02-16 巫山老妖小巫技術(shù)博客

筆者使用git有一段時間了速那,踩過不少坑标沪,這里分享下我在git工作流方面的一些經(jīng)驗(yàn)贮配。

什么是Git工作流囊卜?

Git工作流你可以理解為工作中團(tuán)隊(duì)成員遵守的一種代碼管理方案半火,在Git中有以下幾種工作流方案作為方案指導(dǎo):

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

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

集中式工作流

這種工作方式跟svn類似越妈,它只有一個master分支,開發(fā)者會先把遠(yuǎn)程的倉庫克隆到本地钮糖,之后的修改和提交都在本地操作梅掠,直到在某個合適的時間點(diǎn)將本地的代碼合入到遠(yuǎn)程master酌住。這種工作流比較適合小團(tuán)隊(duì),因?yàn)樾F(tuán)隊(duì)可能不會太多的協(xié)作和合流的動作阎抒。

功能開發(fā)工作流

這種工作流關(guān)注功能開發(fā)酪我,不直接往master提交代碼保證它是穩(wěn)定并且干凈的,而是從master拉取feature分支進(jìn)行功能開發(fā)且叁,團(tuán)隊(duì)成員根據(jù)分工拉取不同的功能分支來進(jìn)行不同的功能開發(fā)都哭,這樣就可以完全隔離開每個人的工作。當(dāng)功能開發(fā)完成后逞带,會向master分支發(fā)起Pull Request欺矫,只有審核通過的代碼才真正允許合入master,這樣就加強(qiáng)了團(tuán)隊(duì)成員之間的代碼交流展氓,也就是我們常說的Code Review穆趴。

Gitflow工作流

這個工作流其實(shí)也是我們團(tuán)隊(duì)采用的工作流,這也是很多團(tuán)隊(duì)會采用的工作流遇汞,它會相對復(fù)雜一點(diǎn)未妹,但它非常適合用來管理大型項(xiàng)目的發(fā)布和維護(hù),后面筆者也會詳細(xì)講下這一塊空入。貫穿整個開發(fā)周期络它,master和develop分支是一直存在的,master分支可以被視為穩(wěn)定的分支执庐,而develop分支是相對穩(wěn)定的分支酪耕,特性開發(fā)會在feature分支上進(jìn)行,發(fā)布會在release分支上進(jìn)行轨淌,而bug修復(fù)則會在hotfix分支上進(jìn)行迂烁。筆者也是花了不少時間才熟練掌握整個工作流,期間遇到不少坑递鹉,后面會跟大家分享下盟步。

Forking工作流

Forking工作流對于開源項(xiàng)目貢獻(xiàn)者一定不陌生了,它有一個公開的中央倉庫躏结,其他貢獻(xiàn)者可以Fork(克氯磁獭)這個倉庫作為你自己的私有倉庫,開源項(xiàng)目維護(hù)者可以直接往中央倉庫push代碼媳拴,而代碼貢獻(xiàn)者只能將代碼push到自己的私有倉庫黄橘,只有項(xiàng)目維護(hù)者接受代碼貢獻(xiàn)者往中央倉庫發(fā)起的pull request才會真正合入。

小結(jié)一下
上面已經(jīng)大致講了在git當(dāng)中的四種比較常見的工作流屈溉,都是需要開發(fā)者去實(shí)踐理解的塞关。
關(guān)于git工作流,只有選用最合適自己團(tuán)隊(duì)的工作流才能有效的提高開發(fā)效率子巾,上面提到的一些工作流模式都有各自的適用場景帆赢,如何選用適合自己團(tuán)隊(duì)的工作流得結(jié)合團(tuán)隊(duì)成員的實(shí)際情況小压,看團(tuán)隊(duì)成員對于工作流的理解程度,還有對于工作流的執(zhí)行程度椰于。
我們團(tuán)隊(duì)的一些實(shí)踐
現(xiàn)在講下我們團(tuán)隊(duì)針對Gitflow的一些實(shí)踐:
master分支

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

develop分支

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

feature分支

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

release分支

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

hotfix分支

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

大家可能會發(fā)現(xiàn)我們這個跟標(biāo)準(zhǔn)的Gitflow工作流有些差別偏陪,其實(shí)也沒有什么標(biāo)準(zhǔn)不標(biāo)準(zhǔn)的孩饼,前面說到要結(jié)合團(tuán)隊(duì)的實(shí)際情況,我們團(tuán)隊(duì)對于目前所采用的工作方式都是達(dá)成共識的竹挡,所以有一些差異并沒有關(guān)系。
說了這么久立膛,還沒有一句git命令揪罕,那就讓大家感受一下吧(感謝Bugly小色熊整理):
1). 首先將遠(yuǎn)程代碼拉取到本地

git clone xxx   
git checkout -b develop origin/develop

2).新建feature分支

git checkout -b feature

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

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

然后由feature負(fù)責(zé)人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ā)完成后,所有人需要將本地的代碼變更提交到遠(yuǎn)程

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

然后由feature負(fù)責(zé)人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修復(fù)在release/feature上

git checkout develop    
git checkout -b release/feature

release/feature分支的同步合并與feature分支相同
6).release/feature分支bug修復(fù)完成后茬祷,拉取對應(yīng)的tag推送遠(yuǎn)程進(jìn)行發(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)定版本(實(shí)際操作為發(fā)起merge request)
總結(jié)
本篇文章主要針對筆者工作中對于git工作流的一些理解和實(shí)踐祭犯,目前我們團(tuán)隊(duì)也是嚴(yán)格按照這樣的工作流來完成日常的開發(fā)工作秸妥,一個讓團(tuán)隊(duì)成員認(rèn)可并且有效的工作流才是最適合我們的工作流,任何規(guī)則不是為了限制我們思考沃粗,而是為了讓工作更加高效有序粥惧,盡量減少人為的失誤尝胆。git是一個博大精深的東西几于,筆者也是不斷在實(shí)際應(yīng)用中去理解它,任何一門技術(shù)的學(xué)習(xí)也是這樣,就像程序員常用來裝逼的一首詩:

紙上得來終覺淺挺尿,絕知此事要躬行。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苞氮,一起剝皮案震驚了整個濱河市凯力,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌饵婆,老刑警劉巖勺馆,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異侨核,居然都是意外死亡草穆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門搓译,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悲柱,“玉大人,你說我怎么就攤上這事些己⊥慵Γ” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵段标,是天一觀的道長涯冠。 經(jīng)常有香客問我,道長逼庞,這世上最難降的妖魔是什么蛇更? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮赛糟,結(jié)果婚禮上派任,老公的妹妹穿的比我還像新娘。我一直安慰自己璧南,他們只是感情好吨瞎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著穆咐,像睡著了一般颤诀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上对湃,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天崖叫,我揣著相機(jī)與錄音,去河邊找鬼拍柒。 笑死心傀,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拆讯。 我是一名探鬼主播脂男,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼养叛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宰翅?” 一聲冷哼從身側(cè)響起弃甥,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎汁讼,沒想到半個月后淆攻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嘿架,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年瓶珊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耸彪。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡伞芹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蝉娜,到底是詐尸還是另有隱情丑瞧,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布蜀肘,位于F島的核電站,受9級特大地震影響稽屏,放射性物質(zhì)發(fā)生泄漏扮宠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一狐榔、第九天 我趴在偏房一處隱蔽的房頂上張望坛增。 院中可真熱鬧,春花似錦薄腻、人聲如沸收捣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽罢艾。三九已至,卻和暖如春尽纽,著一層夾襖步出監(jiān)牢的瞬間咐蚯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工弄贿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留春锋,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓差凹,卻偏偏與公主長得像期奔,于是被迫代替她去往敵國和親侧馅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

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

  • 多種多樣的工作流使得在項(xiàng)目中實(shí)施Git時變得難以選擇呐萌。這份教程提供了一個出發(fā)點(diǎn)馁痴,調(diào)查企業(yè)團(tuán)隊(duì)最常見的Git工作流。...
    JSErik閱讀 4,403評論 2 8
  • 筆者使用git有一段時間了搁胆,踩過不少坑弥搞,這里分享下我在git工作流方面的一些經(jīng)驗(yàn)。 什么是Git工作流渠旁? Git工...
    IT_xiao小巫閱讀 5,352評論 2 21
  • 1攀例、 當(dāng)我們在懵懂無知的小時候,在從攀爬到能夠走路的時候顾腊,我們就在不停地走著路粤铭,雖然小的時候摔倒過許多次,但也總是...
    大房子613閱讀 366評論 1 2
  • 一日和Z先生聊天杂靶,我說我要很多很多梆惯。他耐心聽完一個偶爾任性的女子說完,鄭重地說:會有的吗垮!面包會有的垛吗!一切都會有的!...
    影半夏閱讀 550評論 2 3