全程剖析:Subversion合并之簡(jiǎn)單介紹一
Subversion合并問(wèn)題你是否了解,這里就向大家簡(jiǎn)單介紹一下,歡迎大家能和我一起學(xué)習(xí)Subversion合并。
Subversion1.5支持合并跟蹤,本文將對(duì)什么是合并跟蹤,及其對(duì)你們組織具備的意義提供了高級(jí)的總體看法,我將會(huì)從許多基本的解釋開(kāi)始,如果你熟悉分支與合并,請(qǐng)掠過(guò)第1段。
1.什么是分支與合并?
開(kāi)發(fā)團(tuán)隊(duì)經(jīng)常會(huì)在多個(gè)并行線上開(kāi)發(fā),叫做”分支”,一個(gè)分支從拷貝開(kāi)發(fā)項(xiàng)目(或一個(gè)目錄)所有的文件開(kāi)始,然后開(kāi)始單獨(dú)的維護(hù)這個(gè)拷貝,文件開(kāi)始都是相同的,但經(jīng)過(guò)一段時(shí)間,它們將會(huì)不同,因?yàn)椴煌拈_(kāi)發(fā)者在不同分支做出了修改。
為什么分支?你或許在Subversion創(chuàng)建一個(gè)分支用來(lái)維護(hù)產(chǎn)品發(fā)布,同時(shí)為下一個(gè)版本工作。為什么?下一個(gè)版本會(huì)有新的特性,但是在維護(hù)分支你只接受bug修改。另一個(gè)用例是開(kāi)發(fā)復(fù)雜的新特性,而它會(huì)將使得開(kāi)發(fā)構(gòu)建不穩(wěn)定,通過(guò)在不同分支開(kāi)發(fā),你將其他開(kāi)發(fā)者從可能的構(gòu)建失敗中分離出去。Subversion自己的合并跟蹤特性在一個(gè)分支上開(kāi)發(fā)了差不多一年。
Graph1.兩個(gè)分支的主線開(kāi)發(fā)(trunk)
Subversion一直支持分支,但與其他系統(tǒng)不同,它不會(huì)真正的拷貝文件,那樣會(huì)快速加大版本庫(kù)的體積。相反,Subversion會(huì)創(chuàng)建一個(gè)到原來(lái)已有目錄的快速引用,只是記錄分支和trunk的文件修改,這樣的結(jié)果是創(chuàng)建分支非常迅速,版本庫(kù)幾乎不會(huì)增加大小。有些時(shí)候,代碼需要合并。例如,一個(gè)開(kāi)發(fā)者在維護(hù)分支上修訂了一個(gè)bug,你會(huì)希望將修改合并到主開(kāi)發(fā)線上,否則,你的下個(gè)發(fā)布還會(huì)有這個(gè)bug。另一個(gè)例子是在分支上開(kāi)發(fā)一個(gè)新特性。就像我們說(shuō)的,Subversion自己的合并跟蹤特性就是在分支上開(kāi)發(fā)的,在2007年2月,這個(gè)特性足夠穩(wěn)定,然后合并到了trunk。
Graph2.Subversion合并代碼
讓我們看一個(gè)簡(jiǎn)單的合并實(shí)例,這是我們的代碼:
- trunk的代碼(主碼基)
- main()
- {
- printf(”hello,wordn”);
- }
- 現(xiàn)在我們做一個(gè)分支,從用戶的角度會(huì)有兩份代碼:trunk的代碼(主碼基)分支代碼
- main()
- {
- printf(”hello,wordn”);
- }
- main()
- {
- printf(”hello,wordn”);
- }
- “Word”實(shí)際上應(yīng)該為”World”,我們有一個(gè)bug,開(kāi)發(fā)者在分支上修改了它,文件現(xiàn)在已經(jīng)不同了。
- main()
- {
- printf(”hello,wordn”);
- }
- main()
- {
- printf(”hello,worldn”);
- }
- 在某一時(shí)刻,bug修正合并到了trunk
- >>svnmerge:Subversion將修改從分支合并到trunk。
- main()
- {
- printf(”hello,worldn”);
- }
- main()
- {
- printf(”hello,worldn”);
- }
2.Subversion與合并
就像分支,Subversion一直支持合并,如果你要求它可以自動(dòng)完成許多工作。但是Subversion不會(huì)”記住”什么代碼從什么分支在什么時(shí)候合并,盡管分支與合并在Subversion中工作很好,但是合并跟蹤特性的添加解決了許多限制:重復(fù)合并,假設(shè)你有一個(gè)特性分支與主干同步,沒(méi)有合并跟蹤時(shí),你必須小心的(且手工的)記錄哪些修訂版本已經(jīng)合并,這會(huì)非常乏味,而且如果你忘了合并特定修改或是創(chuàng)建叫做”偽造的沖突”的東西,這意味著文件沒(méi)有正確的合并,結(jié)果修訂版本有錯(cuò)誤。
審計(jì)。當(dāng)你合并一個(gè)特性分支回trunk,trunk的歷史只記錄了合并的發(fā)生,但是不知道合并了什么,這樣就很難準(zhǔn)確找出合并了什么到trunk。
3.這對(duì)你意味著什么?
開(kāi)發(fā)團(tuán)隊(duì)多年里成功使用Subversion合并和分支,但是合并跟蹤提供了許多好處:合并跟蹤添加了審計(jì)/跟蹤能力(那些代碼合并了,何時(shí),何地?)。許多組織因?yàn)楣芾砟康男枰@個(gè)特性。合并跟蹤減少了錯(cuò)誤和管理費(fèi)用。團(tuán)隊(duì)會(huì)因?yàn)镾ubversion的合并跟蹤功能提高生產(chǎn)力。經(jīng)常合并很重要。兩個(gè)開(kāi)始相同的文件會(huì)隨著時(shí)間變得很不一樣,不同的越多,越難以合并。如果經(jīng)常合并,增量的區(qū)別會(huì)比較小,會(huì)易于合并。合并跟蹤可以使得易于經(jīng)常合并。許多選擇Subversion的公司采用限制分支的策略,他們不能從好的分支策略和并行開(kāi)發(fā)中得到好處,例如:他們選擇在主開(kāi)發(fā)線開(kāi)發(fā)一個(gè)風(fēng)險(xiǎn)很大的新特性,結(jié)果就是項(xiàng)目成員要處理經(jīng)常的構(gòu)建錯(cuò)誤。最終的好處:一些公司還沒(méi)有使用Subversion,而使用傳統(tǒng)的昂貴的工具,他們?cè)诘却喜⒏櫋1疚膶?duì)Subversion合并問(wèn)題的介紹還沒(méi)有結(jié)束,請(qǐng)大家繼續(xù)關(guān)注。
【編輯推薦】