在實(shí)際生產(chǎn)開發(fā)的過程中线召,如果每個人都隨意的創(chuàng)建分支驱入,隨意的提交commit,必將導(dǎo)致整個git倉庫非常的混亂橱野,不易于團(tuán)隊(duì)協(xié)作朽缴。Vincent Driessen 同學(xué)為了解決這個問題提出了?A Successful Git Branching Model,最后形成了業(yè)內(nèi)普遍采用的git 工作流程水援,大家都在約定的流程內(nèi)使用git密强,使得團(tuán)隊(duì)協(xié)作效率大大提高?
下面是git flow的工作流程圖:
?
Git Flow 的常用分支
?
生產(chǎn)分支(master)?
Master分支是倉庫的主分支茅郎,這個分支包含最近發(fā)布到生產(chǎn)環(huán)境的代碼,最近發(fā)布的Release或渤, 這個分支只能從其他分支合并系冗,不能在這個分支直接修改?
補(bǔ)丁分支(hotfix)?
當(dāng)我們在生產(chǎn)環(huán)境發(fā)現(xiàn)新的Bug時(shí)候,我們需要基于master分支創(chuàng)建一個Hotfix分支薪鹦,然后在Hotfix分支上修復(fù)bug掌敬,完成Hotfix后,我們要把hotfix分支合并回Master和Develop分支?
發(fā)布分支(release)?
當(dāng)你需要發(fā)布一個新功能的時(shí)候池磁,要基于Develop分支創(chuàng)建一個Release分支奔害,在Release分支測試并修復(fù)bug,完成release后地熄,把release合并到master和develop分支?
開發(fā)分支(develop)?
這個分支是我們的主開發(fā)分支华临,包含所有要發(fā)布到下一個Release的代碼,這個主要合并與其他分支端考,比如Feature分支?
功能分支(feature)?
feature分支主要是用來開發(fā)一個新的功能雅潭,一旦開發(fā)完成,我們合并回Develop分支進(jìn)入下一個Release?
接下來我們講下git flow的具體使用細(xì)節(jié):
當(dāng)我們新建git倉庫之后却特,默認(rèn)會創(chuàng)建一個主分支也就是master分支扶供,由于master分支是用于發(fā)布生產(chǎn)環(huán)境,所有必須保證master上代碼的穩(wěn)定性裂明,所以我們不能直接在master分支上修改提交椿浓。我們要基于master分支創(chuàng)建一個develop分支,develop分支用于保存開發(fā)好的相對穩(wěn)定的功能漾岳,master分支和develop分支是倉庫的常駐分支轰绵,一直會保留在倉庫中
?
當(dāng)新的開發(fā)任務(wù)來了之后,就要編寫代碼了尼荆,我們盡量不要在develop分支上寫代碼,要保證develop分支的相對穩(wěn)定唧垦,所以這時(shí)我要就要基于develop 分支創(chuàng)建一個臨時(shí)的開發(fā)分支捅儒,然后在開發(fā)分支上編寫代碼,等功能開發(fā)完之后我們再把開發(fā)分支合并到develop上
?
新功能合并到develop分支之后振亮,我們想把新功能發(fā)布到生產(chǎn)環(huán)境巧还,首先基于develop分支創(chuàng)建release分支,然后在release分支測試完成之后坊秸,把release分別合并到master分支和develop分支
?
release分支合并到master分支之后麸祷,在master分支上打標(biāo)簽用于發(fā)布:
?
我們把代碼發(fā)布到了生產(chǎn)環(huán)境,用戶在使用的時(shí)候給我們反饋了一個bug褒搔,這時(shí)我們需要基于master分支創(chuàng)建一個hotfix 分支阶牍,用于修復(fù)bug喷面,bug修好之后,把hotfix 分支分別合并到master分支和develop分支
?
Git flow工具?
如果你理解了上面的流程走孽,你完全可以不使用Git flow工具惧辈,但是如果你想更標(biāo)準(zhǔn)化的執(zhí)行g(shù)it flow,可以嘗試使用git flow工具?
安裝?
Mac OS X
$brew install git-flow?
Linux
$apt-get install git-flow
Windows
$?wget?-q?-O?-?--no-check-certificate?https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh?|?bash
?
使用?
初始化:?git flow init
開始新Feature:?git flow feature start MYFEATURE
Publish一個Feature(也就是push到遠(yuǎn)程):?git flow feature publish MYFEATURE
獲取Publish的Feature:?git flow feature pull origin MYFEATURE
完成一個Feature:?git flow feature finish MYFEATURE
開始一個Release:?git flow release start RELEASE [BASE]
Publish一個Release:?git flow release publish RELEASE
發(fā)布Release:?git flow release finish RELEASE 別忘了git push --tags
開始一個Hotfix:?git flow hotfix start VERSION [BASENAME]
發(fā)布一個Hotfix:?git flow hotfix finish VERSION
想要學(xué)習(xí)其他開發(fā)技術(shù)磕瓷,可關(guān)注我公眾號: