摘要:一介紹本文介紹一種多人參與開(kāi)發(fā)時(shí)的分支管理模型,在團(tuán)隊(duì)項(xiàng)目中成功實(shí)踐。開(kāi)發(fā)新的功能某先從分支出分支,命名為。建議請(qǐng)勿在周五發(fā)布任何正式環(huán)境分支,以免出現(xiàn)問(wèn)題六分支命名的建議分支以它類(lèi)型名字命名。如修復(fù)連接數(shù)泄漏的分支,可命名為。
一、介紹
二、服務(wù)器部署環(huán)境本文介紹一種多人參與開(kāi)發(fā)時(shí)的 GIT 分支管理模型,在團(tuán)隊(duì)項(xiàng)目中成功實(shí)踐。使用的是gitlab來(lái)做代碼管理與權(quán)限控制。
一般來(lái)說(shuō),服務(wù)器端分以下幾種運(yùn)行、部署環(huán)境:
staging:用于開(kāi)發(fā)功能時(shí)給?RD?測(cè)試用,代碼、數(shù)據(jù)庫(kù)都是測(cè)試環(huán)境的。
preview:用于代碼部署到生產(chǎn)環(huán)境前的測(cè)試,代碼是準(zhǔn)生產(chǎn)版本,數(shù)據(jù)庫(kù)是生產(chǎn)環(huán)境的。
production:生產(chǎn)環(huán)境,代碼、數(shù)據(jù)庫(kù)都是生產(chǎn)環(huán)境的。
以上環(huán)境的代碼穩(wěn)定版依次提高。
三、分支種類(lèi)為配合以上幾種部署環(huán)境,代碼庫(kù)分以下幾種類(lèi)型的分支:
staging?分支:用于 staging 環(huán)境的部署。
master?分支:GIT 的默認(rèn)分支,提供最新、穩(wěn)定的代碼。
preview?分支:用于 preview 環(huán)境的部署。
release?分支:用于 production 環(huán)境的部署,保持代碼隨時(shí)可發(fā)布到生產(chǎn)環(huán)境。
以上幾個(gè)分支會(huì)永久存在于代碼庫(kù)中,在開(kāi)發(fā)功能、修復(fù) BUG 的過(guò)程中,還會(huì)用到幾種分支。
開(kāi)發(fā)新功能時(shí)會(huì)用到的:
dev 分支:以 dev_xxx 命名。xxx 表示**功能**的簡(jiǎn)單描述。 feature 分支:以 feature_xxx 命名,其中,xxx 表示對(duì)**子功能**的簡(jiǎn)單描述。 一個(gè)功能會(huì)拆成若干個(gè)子功能,每個(gè) RD 開(kāi)發(fā)?1 個(gè)子功能。dev 分支與 feature 分支的區(qū)別: 一個(gè)新功能通常需要多個(gè) RD 參與開(kāi)發(fā)。RD 在各自的 feature 分支提交代碼。存在一種情況,RD B 的代碼 依賴(lài) RD A,而這個(gè)時(shí)候兩個(gè)人寫(xiě)的代碼都不穩(wěn)定,不適合往 master 分支合并。此時(shí),RD A 將自己的代碼 先合入 dev 分支,RD B 基于 dev 分支進(jìn)行開(kāi)發(fā)。 修復(fù)常規(guī)?bug 時(shí)會(huì)用到的: bugfix:以 bugfix_xxx 命名。xxx 表示 bug 的簡(jiǎn)單描述。 修復(fù)緊急 bug 時(shí)會(huì)用到的: hotfix:以 hotfix_xxx 命名。xxx 表示 bug 的簡(jiǎn)單描述。
綜上,一般情況,我們一共會(huì)用到以下幾種分支: staging、master、preview、release、dev、feature、bugfix、hotfix 。
?
四、分支的生命周期 示意圖 master 分支默認(rèn)存在,master 分支上保持最新的、穩(wěn)定的代碼。
從以下分支合并(merged from):
dev、bugfix、hotfix
從以下分支合并(merged from):
master
合入以下分支:
一旦拉出,不再合入其它分支
說(shuō)明:
preview 分支用于代碼部署到生產(chǎn)環(huán)境前的預(yù)發(fā)布,用于正式上線前的最后一次測(cè)試。master 分支的代碼部署到生產(chǎn)環(huán)境前,
先用 merge (發(fā) merge request 或用 git merge 命令,下同)把代碼合入 preview 分支。
從以下分支合并(merged from):
master
合入以下分支:
一旦拉出,不再合入其它分支
說(shuō)明:
preview 分支的代碼在預(yù)生產(chǎn)環(huán)境測(cè)試通過(guò)后,master 分支上、合入 preview 分支的結(jié)點(diǎn),往 release 分支 merge 一次。
從以下分支合并(merged from):
feature
合入以下分支:
一旦拉出,不再合入其它分支
?
說(shuō)明:
?
staging 分支的代碼給 RD 測(cè)試功能用。RD 在 feature 開(kāi)發(fā)完子功能后,把代碼提交到 feature 分支,再把 feature 分支合到 staging 分支。最后在 xbox 上部署 staging 環(huán)境,進(jìn)行測(cè)試。
?派生自以下分支(forked from):?master
合入以下分支:?master
說(shuō)明:
dev 分支用于多人開(kāi)發(fā)同一個(gè)功能時(shí)提交代碼。它的存在時(shí)間跟新功能開(kāi)發(fā)的時(shí)間相同。新功能開(kāi)始開(kāi)發(fā)時(shí),它從 master 分支 fork 出來(lái);新功能開(kāi)發(fā)結(jié)束時(shí),它被合入 master 分支,然后刪除。
派生自以下分支(forked from): dev 合入以下分支: staging、dev
bugfix 分支說(shuō)明:
feature 分支用于 RD 個(gè)人提交代碼。開(kāi)發(fā)新功能時(shí),每個(gè) RD 從 dev 分支 fork 出自己的 feature 分支,不同 RD 在遠(yuǎn)程代碼倉(cāng)庫(kù)不共享?feature 分支。當(dāng)代碼可測(cè)試時(shí),先提交到 feature 分支,再 merge 到 staging 分支、發(fā)布、測(cè)試。測(cè)試通過(guò)后,merge 到 dev 分支。如果另外一個(gè) RD 需要依賴(lài)你的代碼,他需要先將自己 feature 分支 rebase (用 git rebase 命令)到最新的 dev 分支(包含你的代碼),然后進(jìn)行開(kāi)發(fā)。
hotfix 分支派生自以下分支(forked from):
master
合入以下分支:
staging、master說(shuō)明:
bugfix 分支用于修復(fù)常規(guī)、不緊急的 bug。RD 開(kāi)始修復(fù) bug 時(shí),從 master 分支 fork 出 bugfix 分支。提交修復(fù)代碼后,把 bugfix 分支 merge 到 staging,在 staging 環(huán)境發(fā)布、測(cè)試。測(cè)試通過(guò)后,再把 bugfix 分支 merge 到 master,然后刪除。
派生自(forked from):release 合入以下分支:staging、master、preview、release
五、典型場(chǎng)景舉例說(shuō)明:
hotfix 分支用于修復(fù)生產(chǎn)環(huán)境的、緊急的 bug。RD 開(kāi)始修復(fù)緊急 bug 時(shí),從 release 分支 fork 出 hotfix 分支。提交修復(fù)代碼后,把 hotfix 分支 merge 到 staging,在 staging 環(huán)境發(fā)布、測(cè)試。在 staging 測(cè)試通過(guò)后,再把 hotfix 分支 merge 到 preview,在 preview 環(huán)境進(jìn)行測(cè)試。測(cè)試也通過(guò)后,再 merge 到 master、release 分支。
下面舉例一些常見(jiàn)場(chǎng)景,以及分支的操作步驟。
開(kāi)發(fā)新的功能1、某 RD 先從 master 分支 fork 出 dev 分支,命名為 dev_xxx 。 2、參與開(kāi)發(fā)這個(gè)功能的 RD 基于 dev_xxx 分支 fork 出 feature_xxx_RDA,feature_xxx_RDB 等分支。 3、各 RD 在自己的 feature 分支開(kāi)發(fā)子功能。 4、RD A 在自己的分支 feature_xxx_RDA 上提交了幾個(gè)工具類(lèi),這些類(lèi)會(huì)給其他 RD 用。他把 feature_xxx_RDA push(用 git push 命令)到遠(yuǎn)程倉(cāng)庫(kù),再 merge 到 staging,在 staging 環(huán)境發(fā)布、測(cè)試。如果測(cè)試發(fā)現(xiàn)問(wèn)題,他再提交一個(gè) commit 到?feature_xxx_RDA 分支,然后 merge 到 staging,再發(fā)布、測(cè)試。測(cè)試通過(guò)后,他把?feature_xxx_RDA merge 到 dev_xxx 分>支,然后繼續(xù)開(kāi)發(fā)其它功能。 5、RD B 的工作依賴(lài) RD A 開(kāi)發(fā)的工具類(lèi)。他把?feature_xxx_RDB rebase 到 最新的 dev_xxx 分支,然后進(jìn)行開(kāi)發(fā)。 6、所有 RD 開(kāi)發(fā)完后,某 RD 再把 dev_xxx 分支 merge 到 master 分支,然后刪除 dev_xxx 分支。 某 RD 再把 master 分支 merge 到 preview 分支。 7、在 preview 測(cè)試通過(guò)后,再把 master 分支 merge 到 release 分支,然后發(fā)布到生產(chǎn)環(huán)境。修復(fù)常規(guī) bug
1、某 RD 領(lǐng)到一個(gè) bug。開(kāi)始修復(fù)時(shí),他從 master 分支 fork 出 bugfix 分支,命名為 bugfix_xxx 。 2、RD 在 bugfix_xxx 分支上提交修復(fù)代碼,自己測(cè)試通過(guò)后,merge 到 staging,并且在 staging 環(huán)境發(fā)布、測(cè)試。如果測(cè)試發(fā)現(xiàn)問(wèn)題,他再提交一個(gè) commit 到 bugfix_xxx 分支,然后再 merge 到 staging,再發(fā)布、測(cè)試。直到測(cè)試完全通過(guò),他把 bugfix_xxx merge 到 master 分支,然后刪除 bugfix_xxx 分支。 3、因?yàn)槭浅R?guī) bug,他不需要馬上把修復(fù)的代碼部署到生產(chǎn)環(huán)境。等待下一次發(fā)布周期即可。修復(fù)線上緊急?bug
緊急 bug 是指如果不馬上修復(fù),會(huì)造成重大損失的 bug。操作步驟如下:
1、某 RD 領(lǐng)到一個(gè)緊急?bug。開(kāi)始修復(fù)時(shí),他從 release 分支 fork 出 hotfix 分支,命名為 hotfix_xxx。 2、RD 在 hotfix_xxx 分支進(jìn)行修復(fù)。提交代碼后,他把 hotfix_xxx merge 到 staging,并且在 staging 環(huán)境發(fā)布、測(cè)試。如果測(cè)試發(fā)現(xiàn)問(wèn)題,他再提交一個(gè) commit 到 hotfix_xxx 分支,然后再 merge 到 staging,再發(fā)布、測(cè)試。直到測(cè)試完全通過(guò),他把 hotfix_xxx merge 到 preview 分支,在 preview 環(huán)境測(cè)試。如果測(cè)試發(fā)現(xiàn)問(wèn)題,繼續(xù)在 hotfix_xxx 分支提交修復(fù)代碼,再 merge 到 staging 進(jìn)行測(cè)試。 3、preview 環(huán)境測(cè)試通過(guò)后,RD 把 hotfix_xxx merge 到 release 分支。上線,在生產(chǎn)環(huán)境觀察 bug 是否修復(fù)。 4、如果生產(chǎn)環(huán)境還有問(wèn)題,繼續(xù)在 hotfix_xxx 修復(fù),然后在 staging、preview 測(cè)試,測(cè)試通過(guò)再重新上線。這種情況應(yīng)該盡可能**避免**,保證一次上線修復(fù)成功。 5、生產(chǎn)環(huán)境驗(yàn)證沒(méi)問(wèn)題后,RD 把 hotfix_xxx merge 到 master,然后刪除 hot_xxx 分支。
建議:請(qǐng)勿在周五發(fā)布任何正式環(huán)境分支,以免出現(xiàn)問(wèn)題.
六、分支命名的建議master、release、staging、preview 分支以它類(lèi)型名字命名。
推薦的命名方式
對(duì) dev 分支,建議以?dev_xxx_時(shí)間戳,其中,xxx 表示功能的英文簡(jiǎn)單描述,多個(gè)分詞間用下劃線分隔,時(shí)間戳用 yyyyMMdd 格式。如“保險(xiǎn)禮品后臺(tái)”功能的開(kāi)發(fā)分支,可命名為 dev_ins_gift_20170329。
對(duì) feature、bugfix、hotfix 分支,建議以?前綴_xxx_姓名?命名,其中前綴指 feature、bugfix、hotfix,xxx 表示功能的簡(jiǎn)單描述,姓名是負(fù)責(zé)開(kāi)發(fā)功能的 RD 名字拼音。如修復(fù)連接數(shù)泄漏 bug 的分支,可命名為 bugfix_fix_conn_leak_zhangsan 。
反例
1、 不包含任何前綴
2、 只包含前綴、時(shí)間戳
3、 只包含前綴、姓名
4、 其它可讀性低的命名
https://barro.github.io/2016/02/a-succesful-git-branching-model-considered-harmful/
http://nvie.com/posts/a-succe...
附錄 名詞解釋RD: Research and Development engineer,研發(fā)工程師
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/70287.html
摘要:項(xiàng)目地址瓦力,上線開(kāi)源兩個(gè)月,目前已支持超過(guò)十家企業(yè)線上部署使用,每周更新一個(gè)版本,持續(xù)帶來(lái)新特性。支持開(kāi)放接口支持第三方了解更多項(xiàng)目地址瓦力,官方主頁(yè)瓦力。 1 Git Flow 一般而言,軟件開(kāi)發(fā)模型有常見(jiàn)的瀑布模型、迭代開(kāi)發(fā)模型、以及最近出現(xiàn)的敏捷開(kāi)發(fā)模型等不同的模型。每種模型有各自應(yīng)用場(chǎng)景,Git Flow是構(gòu)建在Git之上的一個(gè)組織軟件開(kāi)發(fā)活動(dòng)的模型,Git Flow重點(diǎn)解...
摘要:沒(méi)有一個(gè)全局的版本號(hào),而有目前為止這是跟相比缺少的最大的一個(gè)特征。這能確保代碼內(nèi)容的完整性,確保在遇到磁盤(pán)故障和網(wǎng)絡(luò)問(wèn)題時(shí)降低對(duì)版本庫(kù)的破壞。合并沖突多人對(duì)同一文件的工作副本進(jìn)行更改,并將這些更改提交到倉(cāng)庫(kù)。Git 是一種分布式版本控制系統(tǒng),它可以不受網(wǎng)絡(luò)連接的限制,加上其它眾多優(yōu)點(diǎn),目前已經(jīng)成為程序開(kāi)發(fā)人員做項(xiàng)目版本管理時(shí)的首選,非開(kāi)發(fā)人員也可以用 Git 來(lái)做自己的文檔版本管理工具。 ...
閱讀 1686·2019-08-30 15:55
閱讀 997·2019-08-30 15:44
閱讀 892·2019-08-30 10:48
閱讀 2064·2019-08-29 13:42
閱讀 3205·2019-08-29 11:16
閱讀 1335·2019-08-29 11:09
閱讀 2079·2019-08-26 11:46
閱讀 635·2019-08-26 11:44