最近對于公司項(xiàng)目源碼分支管理有一些規(guī)范構(gòu)思京办,對于同一個項(xiàng)目而言掀序,不同環(huán)境
的源碼管理、自動化部署
方式惭婿、以及接口數(shù)據(jù)隔離
等我們是否可以滿足現(xiàn)狀不恭?
對于基礎(chǔ)項(xiàng)目源碼分支而言,一般有develop
财饥、master
兩個换吧,develop
來研發(fā)功能并測試沒有問題后合并到master
再發(fā)布到生產(chǎn)環(huán)境。
分支示意圖
特性分支(feature)
如果項(xiàng)目比較大钥星,協(xié)同人員比較多沾瓦,每個研發(fā)人員的分工比較明確,針對這種情況我們?nèi)绻€是簡單的使用develop/master
兩個分支就不太能滿足需求了谦炒,針對這個情況我們?nèi)绾稳ヒ?guī)范化管理呢贯莺?
特性分支
一般是基于develop
開發(fā)分支衍生創(chuàng)建的,而且是本地分支
(Local Branches)宁改,不太建議一個特性任務(wù)多個人同時使用缕探,如果必須是多人協(xié)同的任務(wù),那么該特性分支則會變成遠(yuǎn)程分支
(Remote Branches)透且,特性分支的任務(wù)完成后需要合并到develop
分支并后續(xù)提交給測試人員進(jìn)行測試撕蔼。
任務(wù)分配到具體研發(fā)人員后,研發(fā)人員可以在本地創(chuàng)建特性分支
秽誊,如果分支較多為了區(qū)分方便鲸沮,我們可以定義一個分支名稱的前綴,如:feature-
锅论,如果給我分配了用戶管理的任務(wù)讼溺,那么我就可以在本地創(chuàng)建feature-user
特性分支來研發(fā)。
緊急缺陷修復(fù)分支(bugfix)
如果代碼已經(jīng)發(fā)布最易,在運(yùn)行過程中遇到了一個緊急的缺陷怒坯,針對這個缺陷我們需要怎么去修復(fù)呢炫狱?
首先我們需要基于master
分支來衍生創(chuàng)建缺陷修復(fù)分支
,該分支也應(yīng)該是本地分支
(Local Branches)不應(yīng)該被推送到遠(yuǎn)程目標(biāo)倉庫剔猿,我們可以以bugfix-
作為缺陷修復(fù)分支的前綴视译,如:bugfix-register-error
。
缺陷一旦修復(fù)完成后需要將bugfix-xxx
分支的代碼變動合并到master
以及develop
:
-
為什么合并到develop归敬?
遇到的缺陷不僅是
master
分支存在酷含,因?yàn)?code>master分支的代碼是從develop
合并而來的,所以我們需要同步合并到develop
防止后續(xù)發(fā)版再次出現(xiàn)相同的問題汪茧。 -
為什么合并到master椅亚?
因?yàn)樵撊毕菔巧a(chǎn)環(huán)境發(fā)現(xiàn)的,雖然我們合并到了
develop
分支舱污,但是不保證距下次發(fā)版生產(chǎn)環(huán)境不再出現(xiàn)緊急的缺陷所以我們需要將代碼合并到master
呀舔。
下一個版本分支(next-version)
如果項(xiàng)目是有規(guī)劃根據(jù)迭代版本循序漸進(jìn)的,那么建議使用next-version
分支扩灯,那么為什么這么做呢媚赖?
顧名思義,next-version
是下一個版本珠插,當(dāng)前版本源碼一般存放于develop
分支省古,而且當(dāng)前版本是跟任務(wù)規(guī)劃來的,不會涉及next-version
分支的源碼丧失,這樣就做到了版本之間的源碼隔離,當(dāng)前版本準(zhǔn)備發(fā)布時防止發(fā)布下個版本未完成的功能惜互。
next-version
是基于develop
分支衍生創(chuàng)建的布讹,develop
是當(dāng)前版本,那么next-version
就是下一個當(dāng)前版本训堆,develop
一旦合并到master
發(fā)布后就需要將next-version
的代碼合并到develop
作為當(dāng)前版本繼續(xù)做后續(xù)研發(fā)描验。
支持自動化部署的分支
自動化部署可以極大的提高CI/CD
效率,研發(fā)人員只需要關(guān)心業(yè)務(wù)功能怎么去實(shí)現(xiàn)坑鱼,無需考慮代碼怎么去部署膘流,代碼一旦被提交就可以觸發(fā)自動化部署的程序,實(shí)現(xiàn)流水線的自動化部署業(yè)務(wù)鲁沥。
開發(fā)環(huán)境自動化部署可以考慮使用Drone來配置呼股,它很輕量級,在根目錄下創(chuàng)建一個名為.drone.yml
的文件即可搞定配置流程画恰,它還可以結(jié)合支持私有部署的Git
源碼倉庫:Gitea 實(shí)現(xiàn)鉤子回調(diào)彭谁,部署也很簡單使用docker
部署一個管理端、一個運(yùn)行節(jié)點(diǎn)即可允扇。
參與自動化部署的分支一般為:develop
缠局、next-version
则奥。
master
分支則是建議手動觸發(fā)的方式來部署,可以使用Jenkins
狭园。
常見問題
-
功能還未研發(fā)完成读处,臨時接到緊急任務(wù),我怎么把未完成的工作保存并切換分支唱矛?
可以使用
git stash
暫存工作空間的文件變動罚舱,暫存后就可以切換到其他分支做相關(guān)工作了,處理完成后返回未完成的分支執(zhí)行git stash pop
恢復(fù)暫存即可揖赴,git stash
還有很多用法馆匿,可以參考官網(wǎng)文檔:git-stash