在這篇文章中,我提出一個(gè)開發(fā)模型。我已經(jīng)將這個(gè)開發(fā)模型引入到我所有的項(xiàng)目里(無(wú)論在工作還是私人)已經(jīng)一年有余,并且它被證明是非常成功的。我打算寫這些已經(jīng)很久了,但我一直找不到時(shí)間來(lái)做,現(xiàn)在終于有時(shí)間了。我不會(huì)講任何項(xiàng)目的具體細(xì)節(jié),僅是關(guān)于分支策略和釋放管理相關(guān)內(nèi)容。
它主要體現(xiàn)了Git對(duì)我們?cè)创a版本的管理。
為何是Git?
對(duì)于Git與其他集中式代碼管理工具相比的優(yōu)缺點(diǎn)的全面討論,請(qǐng)參見(jiàn)這里。這樣的爭(zhēng)論總是喋喋不休。作為一個(gè)開發(fā)者,與現(xiàn)今的其他開發(fā)工具相比較,我更喜歡Git。Git真得改變了開發(fā)者對(duì)于合并和分支的思考。我曾經(jīng)使用經(jīng)典的CVS/Subversion,然而每次的合并/分支和其他行為總讓人擔(dān)驚受怕(“小心合并里的沖突,簡(jiǎn)直要命!”)。
但是對(duì)于Git來(lái)說(shuō),這些行為非常簡(jiǎn)單和搞笑,它們被認(rèn)為是日常工作中的核心部分。例如,在很多CVS/Subversion書里,分支與合并總是在后面的章節(jié)中被討論(對(duì)于高級(jí)用戶使用),然而在每個(gè)Git書中,在第3章已經(jīng)完全涵蓋了(作為基礎(chǔ))。
簡(jiǎn)單和重復(fù)的特性帶來(lái)的結(jié)果是:分支與合并不再是什么可以害怕的東西。分支/合并被認(rèn)為對(duì)于版本管理工具比其他功能更重要。
關(guān)于工具,不再多說(shuō),讓我們直接看開發(fā)模型吧。這個(gè)模型并不是如下模型:在管理軟件開發(fā)進(jìn)度方面,面對(duì)每個(gè)開發(fā)過(guò)程,每個(gè)隊(duì)員必須按一定次序開發(fā)。
分布式而非集中式
對(duì)于這種分支模型,我們?cè)O(shè)置了一個(gè)版本庫(kù),它運(yùn)轉(zhuǎn)良好,這是一個(gè)”事實(shí)上” 版本庫(kù)。不過(guò)請(qǐng)注意,這個(gè)版本庫(kù)只是被認(rèn)為是中心版本庫(kù)(因?yàn)镚it是一個(gè)分布式版本管理系統(tǒng),從技術(shù)上來(lái)講,并沒(méi)有一個(gè)中心版本庫(kù))。我們將把這個(gè)版本庫(kù)稱為原始庫(kù),這個(gè)名字對(duì)所有的Git用戶來(lái)說(shuō)都很容易理解。
每個(gè)開發(fā)者都對(duì)origin庫(kù)拉代碼和提交代碼。但是除了集中式的存取代碼關(guān)系,每個(gè)開發(fā)者也可以從子團(tuán)隊(duì)的其他隊(duì)友那里獲得代碼版本變更。例如,對(duì)于2個(gè)或多個(gè)開發(fā)者一起完成的大版本變更,為了防止過(guò)早地向origin庫(kù)提交工作內(nèi)容,這種機(jī)制變得非常有用。在上述途中,有如下子團(tuán)隊(duì):Alice和Bob,Alice和David,Clair和David。