您的位置:軟件測試 > 開源軟件測試 > 開源配置管理工具 > SVN
Subversion合并跟蹤
作者:網(wǎng)絡轉載 發(fā)布時間:[ 2013/3/28 15:02:54 ] 推薦標簽:

Subversion 1.5支持合并跟蹤,本文將對什么是合并跟蹤,及其對你們組織具備的意義提供了高級的總體看法,我將會從許多基本的解釋開始,如果你熟悉分支與合并,請掠過第1段。

1. 什么是分支與合并?

開發(fā)團隊經(jīng)常會在多個并行線上開發(fā),叫做”分支”,一個分支從拷貝開發(fā)項目(或一個目錄)所有的文件開始,然后開始單獨的維護這個拷貝,文件開始都是相同的,但經(jīng)過一段時間,它們將會不同,因為不同的開發(fā)者在不同分支做出了修改。

為什么分支?你或許在Subversion創(chuàng)建一個分支用來維護產品發(fā)布,同時為下一個版本工作。為什么?下一個版本會有新的特性,但是在維護分支你只接受bug修改。另一個用例是開發(fā)復雜的新特性,而它會將使得開發(fā)構建不穩(wěn)定,通過在不同分支開發(fā),你將其他開發(fā)者從可能的構建失敗中分離出去。 Subversion自己的合并跟蹤特性在一個分支上開發(fā)了差不多一年。

Graph 1. 兩個分支的主線開發(fā) (trunk)

Subversion一直支持分支,但與其他系統(tǒng)不同,它不會真正的拷貝文件,那樣會快速加大版本庫的體積。相反,Subversion會創(chuàng)建一個到原來已有目錄的快速引用,只是記錄分支和trunk的文件修改,這樣的結果是創(chuàng)建分支非常迅速,版本庫幾乎不會增加大小。

有些時候,代碼需要合并。例如,一個開發(fā)者在維護分支上修訂了一個bug,你會希望將修改合并到主開發(fā)線上,否則,你的下個發(fā)布還會有這個bug。另一個例子是在分支上開發(fā)一個新特性。像我們說的,Subversion自己的合并跟蹤特性是在分支上開發(fā)的,在2007年2月,這個特性足夠穩(wěn)定,然后合并到了trunk。

Graph 2. 合并代碼

讓我們看一個簡單的合并實例,這是我們的代碼:

trunk的代碼 (主碼基)  

main()
{
    printf(”hello, wordn”);
}

現(xiàn)在我們做一個分支,從用戶的角度會有兩份代碼:

 

trunk的代碼 (主碼基) 分支代碼
main()
{
 printf(”hello, wordn”);
}
main()
{
 printf(”hello, wordn”);
}

 
“Word”實際上應該為”World”,我們有一個bug,開發(fā)者在分支上修改了它,文件現(xiàn)在已經(jīng)不同了。
main()
{
 printf(”hello, wordn”);
}
main()
{
 printf(”hello, worldn”);
}

 
在某一時刻,bug修正合并到了trunk
>>svn merge: Subversion將修改從分支合并到trunk。
main()
{
 printf(”hello, worldn”);
}
main()
{
 printf(”hello, worldn”);
}

2. Subversion與合并

像分支,Subversion一直支持合并,如果你要求它可以自動完成許多工作。但是Subversion不會”記住”什么代碼從什么分支在什么時候合并,盡管分支與合并在Subversion中工作很好,但是合并跟蹤特性的添加解決了許多限制:

    重復合并,假設你有一個特性分支與主干同步,沒有合并跟蹤時,你必須小心的(且手工的)記錄哪些修訂版本已經(jīng)合并,這會非常乏味,而且如果你忘了合并特定修改或是創(chuàng)建叫做”偽造的沖突”的東西,這意味著文件沒有正確的合并,結果修訂版本有錯誤。
    審計。當你合并一個特性分支回trunk,trunk的歷史只記錄了合并的發(fā)生,但是不知道合并了什么,這樣很難準確找出合并了什么到trunk。

上一頁12下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd