作者:張克強 作者微博:張克強-敏捷307
1,先鋒主干多穩(wěn)定分支;2,守護主干多先鋒分支;3,主干無分支;4,守護主干單分支。
一、先鋒主干多穩(wěn)定分支
得到一個穩(wěn)定版本后,將此穩(wěn)定版本放到一個新分支上,針對此穩(wěn)定版本的修修補補就在這個分支上進行,新功能不在此分支上開發(fā),而在主干上進行新功能的開發(fā)。 這是業(yè)界采用較多的模式。
穩(wěn)定分支上的有些修改,比如缺陷修復(fù),需要合并到主干, 但有些特定修改,是不需要合并到主干的。這時需要千萬注意,合并準確的文件到主干。
對于不能合并到主干的情況,常見的是再拉一個分支,這個分支專門為少數(shù)特定情況而用,但從全局講,可能會導(dǎo)致太多分支,不同分支間混亂,所以這并不推薦。推薦寧愿采用配置開關(guān)。
圖片來源于 http://blog.csdn.net/binnacler/article/details/4274486
比如freebsd的發(fā)布就是一個典型的例子。
freebsd的主干永遠是current,也就是包括所有最新特性的不穩(wěn)定版本。然后隨著新特性的逐步穩(wěn)定,達到一個發(fā)布的里程碑以后,從主干分出來一個stable分支。freebsd是每個大版本一個分支。也就是說4.x,5.x,6,x各一個分支。每個發(fā)布分支上只有bug修改和現(xiàn)有功能的完善,而不會再增加新特性。新特性會繼續(xù)在主干上開發(fā)。當(dāng)穩(wěn)定分支上發(fā)生的修改積累到一定程度以后,就會有一次發(fā)布。發(fā)布的時候會在穩(wěn)定分支上再分出來一個 release分支。以6.x為例,就會有6.0,6.1,6.2…等發(fā)布分支?!敬硕握杂诰W(wǎng)絡(luò) http://thinkernel.bokee.com/4518935.html 】
二、守護主干多先鋒分支
得到一個穩(wěn)定版本后,拉出先鋒分支,在分支上開發(fā)新功能,在主干上進行修修補補。當(dāng)先鋒分支通過一定的測試之后,合并到主干。可以同時有多個先鋒分支,不同的功能可以拉不同的分支,不同發(fā)布時間點而又要同時開發(fā)的內(nèi)容必須在不同的分支上。
從發(fā)布的角度講,更推薦將肯定一起發(fā)布的內(nèi)容放在相同的先鋒分支上。
主干上永遠是穩(wěn)定版本,可以隨時發(fā)布。bug的修改和新功能的增加,全部在分支上進行。而且每個bug和新功能都有不同的開發(fā)分支,完全分離。而對主干上的每一次發(fā)布都做一個標簽而不是分支。分支上的開發(fā)和測試完畢以后才合并到主干。
這種發(fā)布方法的好處是每次發(fā)布的內(nèi)容調(diào)整起來比較容易。如果某個新功能或者bug在下一次發(fā)布之前無法完成,就不可能合并到主干,也就不會影響其他變更的發(fā)布。另外,每個分支的生命期比較短,唯一長期存在的就是主干,這樣每次合并的風(fēng)險很小。每次發(fā)布之前,只要比較主干上的最新版本和上一次發(fā)布的版本就能夠知道這次發(fā)布的文件范圍了。
【此段摘自于網(wǎng)絡(luò) http://thinkernel.bokee.com/4518935.html 】
三、主干無分支
只有主干,沒有分支,所有緊急正常的修改全在主干上,開發(fā)了一半的東西如果要上線的話,要巧妙的藏起來。對程序的結(jié)構(gòu)提出了高要求,分分合合要方便,開關(guān)配置是少不了的了。單從效率講,這是最高效的模式了。要有不少配套措施才可以。常見的配套措施:每日集成(編譯部署測試),靜態(tài)代碼檢查,測試不僅僅有單元測試,還有接口測試,還有界面自動化測試。
四、守護主干單分支
只有一個分支,緊急修改在主干上進行,正常開發(fā)在分支上進行,主干和分支根據(jù)需要雙向同步。需要采用與主干無分支相同的配套手段,而且在主干和分支上都需要建設(shè)每日集成,甚至持續(xù)集成。
以上四種模式是主干分支開發(fā)的典型情況。
在實際應(yīng)用中,前2種更加常見一些,
主干無分支開發(fā)時碰到極其特殊情況時,不排除拉短分支。
而在第一個模式先鋒主干穩(wěn)定分支開發(fā)時與第三個模式主干無分支,是可以在一段時間內(nèi)相互轉(zhuǎn)換的。
參考資料
1,
代碼的分支管理策略 http://thinkernel.bokee.com/4518935.html
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。