?git因為有分支的存在,才構(gòu)成了多工作流的特色妹蔽。在多人協(xié)作的項目開發(fā)中椎眯,分支很多,雖然各自在分支上互不干擾讹开,但是我們總歸需要把分支合并到一起盅视。真實項目上會遇到很多問題,比如版本迭代旦万、版本發(fā)布闹击、bug修復(fù)、臨時新增功能等等成艘,為了更好的管理代碼赏半,需要制定一個工作流程贺归。這個時候就出現(xiàn)了git flow、github flow断箫、gitlab flow拂酣,當(dāng)然也有很多公司將它們混和使用。
?其中g(shù)it flow出現(xiàn)的最早仲义,github flow 在git flow的基礎(chǔ)上婶熬,做了一些優(yōu)化,適用于CI埃撵。而gitlab flow出現(xiàn)的時間較晚赵颅,所以綜合前面兩種工作流的優(yōu)點,制成了一個新的flow暂刘。
git flow
?git flow可以大致分為主要分支和協(xié)助分支饺谬。
主要分支
?在git flow中代碼倉庫中會一直存在以下兩個分支:
- master
- develop
?其中origin/master分支上的最新代碼永遠(yuǎn)是版本發(fā)布狀態(tài),origin/develop分支上對應(yīng)的是最新開發(fā)進(jìn)度谣拣。
?當(dāng)develop上的代碼達(dá)到穩(wěn)定程度募寨,可以發(fā)布版本的時候,develop這些修改的方式會以一些特定的方式合并到master上去森缠,然后標(biāo)記對應(yīng)的版本號拔鹰。
協(xié)助分支
?除了主要分支,git flow的開發(fā)模式還需要一系列的協(xié)助分支贵涵,來幫助更好的功能的并行開發(fā)格郁,簡化功能開發(fā)和問題修復(fù)。協(xié)助分支分為以下三類:
- Feature Branch
- Release Branch
- Hotfix Branch
?Feature分支用來做分模塊功能開發(fā)独悴,命名看開發(fā)者喜好例书,模塊完成之后,會合并到develop,然后刪除自己刻炒。
?Release分支是用來做版本發(fā)布的預(yù)發(fā)布分支决采,建議命名為release-xxx。例如在1.0.0版本坟奥,develop分支功能全開發(fā)完之后树瞭,提交給測試之后,會從develop分支拉出一個Release-1.0.0分支爱谁,測試給推送給過來的小問題晒喷,在release-1.0.0分支上修改,測試完畢準(zhǔn)備發(fā)布的時候访敌,會把代碼合并到master和develop分支上凉敲,master分支合并完后會打?qū)?yīng)的tag,比如v-1.0.0。為了在測試的時候不影響下一個版本的功能并行開發(fā)爷抓,刪除對應(yīng)release分支势决。
?Hotfix分支主要是為了解決正式上線版本有一些緊急的bug。比如線上版本上出現(xiàn)了很嚴(yán)重的bug蓝撇,需要理解修復(fù)果复。這個時候我們需要從master拉出一個對應(yīng)的分支,比如取名hotfix-xxx,解決完bug渤昌,提交測試虽抄,沒問題然后合并到對應(yīng)到develop和master,并給master打?qū)?yīng)的tag。然后刪除hotfix分支独柑。
看看官網(wǎng)的流程圖:
官網(wǎng)推薦我們git merge的時候加上 no-ff參數(shù)极颓,意思就是不用fast-forword的合并方式,而是有策略的合并群嗤,這樣會讓我們多一個合并提交。這樣保證了一個很清晰的提交歷史兵琳,可以看到被合并分支的存在狂秘。
github flow
github flow就簡單太多了,他只有一個長期分支-master分支躯肌。這個分支上的代碼永遠(yuǎn)是發(fā)布狀態(tài)者春。一般這個分支的會設(shè)置protected分支保護(hù),只有有權(quán)限的人才能推送代碼到master分支清女。
當(dāng)需要開發(fā)新功能時钱烟,需要從master分支創(chuàng)建一個功能分支。本地分支開發(fā)完代碼之后需要定時向遠(yuǎn)程分支推送代碼嫡丙。當(dāng)你需要幫助或者你想合并分支的時候拴袭,可以發(fā)起一個pull request(對應(yīng)的gitlab merge request),當(dāng)review或者討論通過后曙博,代碼會合并到目標(biāo)分支拥刻,一旦合并到master分支般哼,就應(yīng)該立即發(fā)布。惠窄。
通常這個會配合ci同時使用蒸眠,當(dāng)代碼一有變動杆融,就自動發(fā)布楞卡。這里pull request就跟拉個討論組差不多,提供了評論功能支持。可以選擇相關(guān)的人參與,而且參與的人還可以向你的分支提交代碼。還有一個issue tracking(問題追蹤)功能,也就是提交信息中包含 fix #1等信息就可以自動關(guān)閉對應(yīng)的編號的issue,一般未解決的issue為open,解決了就是closed呐芥。
gitlab flow
gitlab flow的出現(xiàn)當(dāng)然是為了補足git flow光绕、github flow的不足媒至。
git flow暴露了很多問題:
- 默認(rèn)工作分支是develop,需要從master切換。
- hotfix和release分支他們分別從master分支拴孤、develop分支創(chuàng)建司顿,使用完畢后,必須合并回master和develop伞租,可能在實際開發(fā)中會忘記泞坦。
- hotfix和release分支在快速迭代的項目里贰锁,基本用不到,開發(fā)完就直接合并到master了滤蝠,出現(xiàn)問題develop修復(fù)直接發(fā)布下一個版本了豌熄。
github flow簡化了git flow的流程,一定程度上解決了上面的問題物咳,還提供了ui操作工具锣险。但是github flow也會存在一些問題,比如:
- 版本發(fā)布會被推遲(比如并行開發(fā)移動端,需要發(fā)布)
- 需要不同環(huán)境的部署(例如:測試環(huán)境(即之前公司用的uat)芯肤,預(yù)發(fā)環(huán)境(之前公司用的stage)巷折,正式環(huán)境(之前用的console));
- 不同的版本發(fā)布和bug修復(fù)。(所以一個分支根本不夠崖咨。)
針對問題1. gitlab flow 就提供了prodution 分支锻拘,比如上面說的console。專門同來發(fā)布版本掩幢。
針對問題2. gitlab flow提供了 多個prodution分支逊拍,比如uat,stage,console。uat沒問題上升到stage,stage沒問題上升到console.
針對問題3. gitlab flow 建議的做法是每一個穩(wěn)定的版本际邻,都要從master分支上拉出一個分支芯丧,發(fā)現(xiàn)問題就從對應(yīng)拉出的分支上創(chuàng)建修復(fù)分支,完成之后世曾,先合并到master,才能合并release缨恒。
總之,git還提供了很多自定義工作流的hook, .git/hooks目錄下轮听。分為客戶端hook和服務(wù)器端hook骗露。這個我了解一下,感覺git還是很強大的血巍。萧锉。
近況
最近換了一個工作,工作雖然是個創(chuàng)業(yè)公司述寡,但是不得不說我很滿意柿隙。大佬們很耐心,會很耐心的教鲫凶,我們不懂也會提供思路教我們禀崖,讓我們自己去學(xué),給我們時間學(xué)螟炫。想起以前十來個模塊的業(yè)務(wù)代碼波附,內(nèi)心是崩潰的。昼钻。如果自己不擠出時間學(xué)掸屡,是很難有進(jìn)步的。從去年開始上班到現(xiàn)在(雖然現(xiàn)在還是很菜)然评,但是總體感覺進(jìn)步了不少(對比以前自己是個天天泡網(wǎng)吧的網(wǎng)癮少年折晦,除了打游戲啥也不會。)沾瓦,不管是以前公司满着,還是現(xiàn)在的公司谦炒,心里都是非常感謝的。风喇。
不多BB了 宁改,下面拿出自己塵封已久的博客:CBC
前端登錄的時候有點小bug,懂nginx大佬可以幫我看看,登錄的時候看下瀏覽器控制臺魂莫。當(dāng)然后臺系統(tǒng)就不提供出來了还蹲。。
偶爾看看電影可以去這:電影
賬號:cbc 密碼:674181203
當(dāng)然你可以注冊賬號耙考,人臉識別服務(wù)器上用不了(沒有域名谜喊,瀏覽器不給打開攝像頭,本地是可以的)倦始,注冊的時候可以跳過斗遏。