GIT工作流
前言: 關(guān)于git的使用, 之前就已經(jīng)寫(xiě)過(guò)一篇博客了: http://www.rzrgm.cn/0zcl/p/6874588.html. 看完這篇博客, 你就基本可以使用git了. 這種使用, 僅限了一兩人的開(kāi)發(fā). 如果團(tuán)隊(duì)有多人, 而且位置較分散. 那這開(kāi)發(fā)就更需要規(guī)范了. 因此, 這篇博客來(lái)說(shuō)一下GIT工作流.
本來(lái)以為我用git命令行可以解決GIT工作流上的問(wèn)題,但其實(shí)只用命令行還是蠻困難的。下面先看看GIT的規(guī)范, 這部分比較無(wú)聊, 下面會(huì)圖文并茂的, 好吧. 如果你瞄了一眼, 覺(jué)得這SB博客, 寫(xiě)得太low了, 然后就關(guān)掉這篇博客, 我感覺(jué)還是錯(cuò)過(guò)一些東東.
一、提交規(guī)則
[feature] 新增功能、更新的提交,例如“[feature] add a new data layer for reading jpeg images”
[bugfix] bug修正的提交,有bugid的補(bǔ)充bugid,例如“[bugfix] now data layer reads single-channel images correctly”
[optimize] 優(yōu)化的提交:性能等方面,feature分之下的單次優(yōu)化要指明,優(yōu)化分支下的用[feature]即可
[refactor] 代碼等重構(gòu)的提交,feature分之下的單次重構(gòu)要指明,重構(gòu)分支下的用[feature]即可
- 每次提交應(yīng)該只能有一個(gè)修改,不能將多個(gè)邏輯修改放在一個(gè)提交中;不可將一個(gè)邏輯修改分成多個(gè)提交
- 例如: 同時(shí)修復(fù)一個(gè)bug,同時(shí)做了重構(gòu)或優(yōu)化,就要把提交分成兩個(gè)(bugfix、refactor/optimize)。
- 每次merged到develop分支的代碼必須為可運(yùn)行的,并且保證多平臺(tái)可用
- 多人協(xié)作過(guò)程中如果在開(kāi)發(fā)同一個(gè)feature,不可以在同一個(gè)feature分支進(jìn)行開(kāi)發(fā),需要各自拉出新feature分支獨(dú)立開(kāi)發(fā),完成后merge到共同的feature分支
- 每日至少一次Git提交,防止代碼丟失
- feature分支在完成后合并到develop
二、版本號(hào)的定義
A.B.C。例如1.1.0。按照功能來(lái)定:
- 如果是大的版本更新,則A+1,并且B和C都設(shè)置為0;
- 如果是小的版本更新,則B+1,并且A不變,C設(shè)置為0;
- 如果是修復(fù)bug的版本更新,則C+1,并且A和B都不變。
三、Git工作流
添加一個(gè)工程文件以后,點(diǎn)擊:(倉(cāng)庫(kù))——(git flow)——(初始化倉(cāng)庫(kù))
- 這個(gè)的目的是為了方便git各種分支的自動(dòng)生成,同時(shí)也是為了后續(xù)工作流的方便使用。
develop
當(dāng)前版本最新開(kāi)發(fā)進(jìn)展,未測(cè)試或者測(cè)試中,對(duì)于單人開(kāi)發(fā)小模塊可以直接提交,多人協(xié)作及大模塊必須通過(guò)合并具體功能子分支,接受來(lái)自feature,release,hotfix的合并。
- 創(chuàng)建分支必須通過(guò)(git flow)——(建立新的功能)從develop來(lái)進(jìn)行
feature分支
這個(gè)分支主要是為了各種研發(fā)方案執(zhí)行使用。(必須推送遠(yuǎn)端,完成feature后合并到develop,以及測(cè)試下是否可以執(zhí)行)
- 分支命名以版本號(hào)+開(kāi)發(fā)者+模塊的形式來(lái),例如:feature/1.0.0_aidy_newfeature。
- 當(dāng)分支特性開(kāi)發(fā)完成后合并到develop,主要是通過(guò)(git flow)——(完成功能)來(lái)進(jìn)行合并,或者手動(dòng)合并。
- 當(dāng)出現(xiàn)合并沖突時(shí),記得與沖突者當(dāng)面一起溝通與合并,并確認(rèn)效果ok。
release分支
這個(gè)分支主要是給研發(fā)方案差不多確定時(shí)使用,主要是為了fixbug等。(完成feature后,必須推送遠(yuǎn)端,以及測(cè)試下是否可以執(zhí)行)
- 這個(gè)分支只來(lái)自develop,當(dāng)研發(fā)差不多了以后,就開(kāi)始做release分支。
- 命名為版本號(hào),例如1.0.0。主要是通過(guò)(git flow)——(建立新的發(fā)布版本)來(lái)進(jìn)行。
- 當(dāng)realease分支差不多了,就通過(guò)(git flow)——(完成發(fā)布版本)來(lái)進(jìn)行。并會(huì)打一個(gè)版本號(hào)的標(biāo)簽。
- 完成后并入develop和master。
hotfix分支
主要用于最新發(fā)布版本的bug修復(fù)。
當(dāng)前版本
- 就通過(guò)(git flow)——(建立新的修復(fù)補(bǔ)丁)來(lái)進(jìn)行。
- 當(dāng)完成以后,通過(guò)(git flow)——(完成新的修復(fù)補(bǔ)?。﹣?lái)進(jìn)行合并。
- 當(dāng)出現(xiàn)合并沖突時(shí),記得與沖突的修改者當(dāng)面一起溝通與合并,并確認(rèn)效果ok。
以上來(lái)自GIT規(guī)范,然而看完GIT規(guī)范感覺(jué)還是沒(méi)有頓悟的感覺(jué)。so,必須得會(huì)使用smartgit呀。
四、使用SmartGit
看完GIT規(guī)范,你已經(jīng)知道,feature分支是平時(shí)開(kāi)發(fā)功能用的,完成feature分支開(kāi)發(fā)后,合并到develop分支,合并成功后,刪除該feature分支。這用smartgit可以輕松實(shí)現(xiàn),用命令行的話(huà)是比較麻煩,但也可以實(shí)現(xiàn)呀。現(xiàn)在的問(wèn)題是,用smartgit如何輕松實(shí)現(xiàn)創(chuàng)建feature分支,刪除feature分支?
點(diǎn)擊Git-Flow,再點(diǎn)擊configure,可出現(xiàn)如下圖:如果你找不到下圖這個(gè)界面,那必然是你操作的姿勢(shì)有問(wèn)題。

看到?jīng)]有,神奇呀,在上圖中,你只需點(diǎn)擊OK,GIT就會(huì)自動(dòng)幫你創(chuàng)建feature, release, hot-fix, develop分支。這超牛逼的。這步操作很重要。完成這步操作后,會(huì)出現(xiàn)develop分支,此時(shí)需要把develop分支推到遠(yuǎn)程。

正常情況下,你遠(yuǎn)程倉(cāng)庫(kù)應(yīng)該有兩個(gè)分支了,分別是master和develop分支。如果沒(méi)有,把它們推到遠(yuǎn)程。
啥,不知道怎么push?有兩種方式,在上圖的左下角的Branches窗口下,你可以點(diǎn)擊master分支,然后鼠標(biāo)右擊,再點(diǎn)擊push to ;也可以在左下角的Branches窗口下,雙擊要push的分支A,此時(shí)分切換到A分支,然后再點(diǎn)擊上圖左上方的Push推到遠(yuǎn)程。
五、feature分支的使用
OK,此時(shí)遠(yuǎn)程倉(cāng)庫(kù)應(yīng)該有兩個(gè)分支master/develop,然而這還遠(yuǎn)遠(yuǎn)不夠呀,你看到同事的項(xiàng)目有一個(gè)feature分支。so,你肯定也是需要feature分支的。
點(diǎn)擊Git-Flow,會(huì)出現(xiàn)下圖。如果沒(méi)出現(xiàn)Start Feature; Start Release這些,必然是你最開(kāi)始的configure有問(wèn)題。

點(diǎn)擊Start Feature來(lái)創(chuàng)建一個(gè)feature分支,分支命令要參考命名規(guī)范。

現(xiàn)在你已經(jīng)有一個(gè)feature分支了。在該分支提交些東西,commit后,提交到遠(yuǎn)程。你會(huì)驚喜的發(fā)現(xiàn)遠(yuǎn)程的倉(cāng)庫(kù)出現(xiàn)feature分支。

現(xiàn)在你可以不斷地開(kāi)發(fā),提交代碼到feature分支上,但feature分支只負(fù)責(zé)一個(gè)功能的開(kāi)發(fā)而已,當(dāng)這個(gè)功能開(kāi)發(fā)完成后,必然需要把該feature分支刪除。
簡(jiǎn)單粗暴地說(shuō),就是當(dāng)feature/0.0.2_zzy_example分支負(fù)責(zé)的功能開(kāi)發(fā)完畢時(shí),需要把feature分支合并到develop分支,合并完成后,feature分支刪除,此時(shí)遠(yuǎn)程倉(cāng)庫(kù)就看不到feature/0.0.2_zzy_example分支。
其實(shí)smartgit已經(jīng)幫我們簡(jiǎn)化了工作。牛逼呀。
當(dāng)你創(chuàng)建feature分支時(shí),會(huì)自動(dòng)切換到feature分支。完成功能開(kāi)發(fā)后,想把feature分支合并到develop分支,如何做呢?
只需點(diǎn)擊Git-Flow,就會(huì)出現(xiàn)下圖。注意,此時(shí)你應(yīng)該是處于feature分支的:

看到上圖的Delete feature branch沒(méi),當(dāng)你合并完成后,就會(huì)把feature分支刪除。
接下來(lái)你需要把develop分支推到遠(yuǎn)程。你會(huì)發(fā)現(xiàn)遠(yuǎn)程的feature分支不見(jiàn)了。

以上,是feature分支開(kāi)發(fā)的流程。
六、發(fā)布版本
今天,團(tuán)長(zhǎng)想考下git方面的操作。給我一個(gè)需求:

先來(lái)看看GIT規(guī)范對(duì)于release分支是如何介紹的:
release分支
這個(gè)分支主要是給研發(fā)方案差不多確定時(shí)使用,主要是為了fixbug等。(完成feature后,必須推送遠(yuǎn)端,以及測(cè)試下是否可以執(zhí)行)
- 這個(gè)分支只來(lái)自develop,當(dāng)研發(fā)差不多了以后,就開(kāi)始做release分支。
- 命名為版本號(hào),例如1.0.0。主要是通過(guò)(git flow)——(建立新的發(fā)布版本)來(lái)進(jìn)行。
- 當(dāng)realease分支差不多了,就通過(guò)(git flow)——(完成發(fā)布版本)來(lái)進(jìn)行。并會(huì)打一個(gè)版本號(hào)的標(biāo)簽。
- 完成后并入develop和master。
第一步:
先創(chuàng)建一個(gè)release分支:點(diǎn)擊Git-Flow,再點(diǎn)擊start release:

輸入release分支名,分支名參考GIT規(guī)范。
第二步:可以在release分支commit, push到遠(yuǎn)程。此時(shí)你的遠(yuǎn)程除master, develop外,應(yīng)該得有一個(gè)release分支
第三步:發(fā)布版本

點(diǎn)擊finish,就會(huì)發(fā)布版本啦,這里需要給版本打一個(gè)tag,tag默認(rèn)會(huì)自動(dòng)顯示為你的版本號(hào)。同時(shí)會(huì)把release合并到master與develop分支。再同時(shí)發(fā)布之后,會(huì)刪除該release分支。
此時(shí)遠(yuǎn)程如下顯示:沒(méi)有release分支。多了一個(gè)Tags版本:

至此,團(tuán)長(zhǎng)交待的任務(wù)完成!
七、附本人測(cè)試用了GIT分支圖:


八、總結(jié):
- 由于最開(kāi)始就沒(méi)用好smartgit,比如下面這張圖的操作。之前就沒(méi)用到,導(dǎo)致后面的操作不順。
- 不要用命令行,不要用命令行,不要用命令行。命令行操作add, commit, push還可以,但對(duì)于分支操作,版本發(fā)布,用smartgit,用smartgit,用smartgit。
- 我想git這塊我頓悟了。佛系佛系,喝懷奶荼冷靜一下。

出處:http://www.rzrgm.cn/0zcl
文章未標(biāo)明轉(zhuǎn)載則為原創(chuàng)博客。歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利.
1.非系統(tǒng)的學(xué)習(xí)也是在浪費(fèi)時(shí)間
2.做一個(gè)會(huì)欣賞美,懂藝術(shù),會(huì)藝術(shù)的技術(shù)人

浙公網(wǎng)安備 33010602011771號(hào)