專(zhuān)家提醒:SVN合并時(shí)應(yīng)注意的關(guān)鍵問(wèn)題
本節(jié)向大家簡(jiǎn)單介紹一下SVN分支與合并方面的知識(shí),主要有SVN合并結(jié)構(gòu)介紹以及SVN合并分支時(shí)應(yīng)該注意的一些問(wèn)題,希望通過(guò)本節(jié)的學(xué)習(xí)大家對(duì)SVN合并相關(guān)知識(shí)有一定的認(rèn)識(shí)。首先看一下SVN合并的介紹。
SVN合并
合并包含兩點(diǎn),首先兩個(gè)版本庫(kù)樹(shù)比較,然后將區(qū)別應(yīng)用到本地拷貝。
這個(gè)命令包括三個(gè)參數(shù): 初始的版本樹(shù)(通常叫做比較的左邊), 最終的版本樹(shù)(通常叫做比較的右邊), 一個(gè)接收區(qū)別的目標(biāo)拷貝(通常叫做合并的目標(biāo))。
一旦這三個(gè)參數(shù)指定以后,兩個(gè)目錄樹(shù)將要做比較,比較結(jié)果將會(huì)作為本地修改應(yīng)用到目標(biāo)工作拷貝,當(dāng)命令結(jié)束后,結(jié)果同你手工修改或者是使用svn add或svn delete沒(méi)有什么區(qū)別,如果你喜歡這結(jié)果,你可以提交,如果不喜歡,你可以使用svn revert恢復(fù)修改。
合并的工作是把主線或者分支上合并范圍內(nèi)的所有改動(dòng)列出,并對(duì)比當(dāng)前副本的內(nèi)容,由合并者手工修改沖突。如果當(dāng)前工作副本是主線的,則合并的范圍是分支上的改動(dòng),如果工作副本是分支的,則合并范圍是主線上的改動(dòng)
(1)主干合并到分支
如果是需要將主線的改動(dòng)SVN合并到分支上,需要在分支的工作副本下進(jìn)行合并,合并的范圍是需要從主線上上次合并的版本到當(dāng)前主線上最新的版本,如果主線和分支都修改了相同的文件,合并后會(huì)出現(xiàn)沖突,然后解決沖突,如果主線修改但是分支沒(méi)有修改,則主線上合并的變更內(nèi)容會(huì)增加到當(dāng)前副本中,提交,如果是第一次合并,則起始版本號(hào)是上次建立分支的版本號(hào)
(2)分支合并到主干
如果是需要將分支的改動(dòng)合并到主線上,需要在主線的工作副本下進(jìn)行合并,合并的范圍是需要從分支上上次合并的版本到當(dāng)前分支上最新的版本,合并后會(huì)出現(xiàn)沖突(沖突的前提如上種情況),然后解決沖突,提交,如果是第一次合并,則起始版本號(hào)是上次建立分支的版本號(hào)
SVN合并分支時(shí)很關(guān)鍵的一點(diǎn)
在使用TortoiseSVN對(duì)Subversion進(jìn)行分支合并時(shí),Merge界面上有兩個(gè)選項(xiàng):From和To。這兩個(gè)選項(xiàng)應(yīng)該如何設(shè)定呢?
對(duì)于合并的這操作,Subversion上對(duì)其有如下的解釋?zhuān)?/p>
引用
迷惑的主要原因是這個(gè)命令的名稱(chēng),術(shù)語(yǔ)“合并”不知什么原因被用來(lái)表明分支的組合,或者是其他什么神奇的數(shù)據(jù)混合,這不是事實(shí),一個(gè)更好的名稱(chēng)應(yīng)該是svndiff-and-apply,這是發(fā)生的所有事件:首先兩個(gè)版本庫(kù)樹(shù)比較,然后將區(qū)別應(yīng)用到本地拷貝。
這個(gè)命令包括三個(gè)參數(shù):
初始的版本樹(shù)(通常叫做比較的左邊),
最終的版本樹(shù)(通常叫做比較的右邊),
一個(gè)接收區(qū)別的工作拷貝(通常叫做合并的目標(biāo))。
一旦這三個(gè)參數(shù)指定以后,兩個(gè)目錄樹(shù)將要做比較,比較結(jié)果將會(huì)作為本地修改應(yīng)用到目標(biāo)工作拷貝,當(dāng)命令結(jié)束后,結(jié)果同你手工修改或者是使用svnadd或svndelete沒(méi)有什么區(qū)別,如果你喜歡這結(jié)果,你可以提交,如果不喜歡,你可以使用svnrevert恢復(fù)修改。還有更詳細(xì)的說(shuō)明:
引用
為了表示你的分支上的修改,你只需要比較分支的初始狀態(tài)與最終狀態(tài),在你的分支上使用svnlog命令,你可以看到你的分支在341版本建立,你的分支最終的狀態(tài)用HEAD版本表示,這意味著你希望能夠比較版本341和HEAD的分支目錄,然后應(yīng)用這些分支的修改到主干目錄的工作拷貝。
其實(shí)使用這個(gè)功能后的過(guò)程是把To的版本和From版本進(jìn)行對(duì)比,然后把之間的差異合并到當(dāng)前的版本中。比如要把一個(gè)分支的修改全部給合并進(jìn)來(lái),F(xiàn)rom就應(yīng)該選擇主線創(chuàng)建了分支的那個(gè)版本,To就應(yīng)該選擇分支的Head版本。如果版本選擇的不正確,比如說(shuō)From選擇了主線的Head版本,就會(huì)把所有分支和主線Head不同的文件都覆蓋到主線上來(lái),造成主線上修改信息的丟失。本節(jié)關(guān)于SVN合并方面的知識(shí)介紹完畢。
【編輯推薦】
- SVN分支和合并問(wèn)題專(zhuān)家在線講解
- SVN分支資深專(zhuān)家專(zhuān)題講解
- SVN分支和合并問(wèn)題專(zhuān)家在線講解
- 專(zhuān)家實(shí)例講解SVN分支和合并問(wèn)題
- 兩個(gè)簡(jiǎn)單操作介紹TortoiseSVN項(xiàng)目