專家實(shí)例講解SVN分支和合并問(wèn)題
本節(jié)向大家簡(jiǎn)單描述一下SVN分支和合并方面的知識(shí),在學(xué)習(xí)SVN的過(guò)程中SVN分支和合并時(shí)經(jīng)常遇到的問(wèn)題,在這里和大家分享一下,希望本文對(duì)大家有用。
關(guān)于主線同SVN分支合并的概念及如何使用的誤區(qū)此問(wèn)題是在netbuddy的問(wèn)題上研究而成,走出誤區(qū)的過(guò)程中得到了pcplayer指點(diǎn)迷津。
一、我的合并需求
在主線的第54個(gè)版本上作了分支,在接下來(lái)的日子里,主線和分支同時(shí)都有修改,此時(shí)需要將分支上的改動(dòng)合并到主線上,合并前主線和分支都已經(jīng)提交,截至到合并前,主線的修改達(dá)到了版本號(hào)66,而分支的修改達(dá)到了68。主線和分支修改的文件不同。
二、我最初的錯(cuò)誤操作
我當(dāng)時(shí)的想法是合并,就是簡(jiǎn)單的把主線的最新版本和分支的最新版本合在一起就成了,而且這也是符合我們的手工習(xí)慣。于是我就作出了一個(gè)錯(cuò)誤的操作:
1、在SVN分支的工作副本上單擊右鍵,選擇合并,出現(xiàn)合并對(duì)話框,在起始路徑和版本號(hào)中選擇主線的最新版本,在結(jié)束路徑中選擇分支的最新版本,然后單擊合并,合并后,提示框內(nèi)沒(méi)有任何合并的內(nèi)容。
2、上個(gè)操作不成功,于是胡亂進(jìn)行這個(gè)操作,在主線的工作副本上單擊右鍵,選擇合并,出現(xiàn)合并對(duì)話框,在起始路徑和版本號(hào)中選擇分支的最新版本,在結(jié)束路徑中選擇主線的最新版本,然后單擊合并,合并后,提示框內(nèi)沒(méi)有任何合并的內(nèi)容。
3、發(fā)現(xiàn)第2個(gè)操作仍沒(méi)有結(jié)果,更暈,于是進(jìn)行下面的操作,在主線的工作副本上單擊右鍵,選擇合并,出現(xiàn)合并對(duì)話框,在起始路徑和版本號(hào)中選擇主線的最新版本,在結(jié)束路徑中選擇分支的最新版本,然后單擊合并,合并后,提示框內(nèi)提示有文件更新,打開更新的文件一看,原來(lái)是分支上的內(nèi)容把主線上的工作副本覆蓋了。于是進(jìn)行下一個(gè)實(shí)驗(yàn)。
4、在SVN分支的工作副本上單擊右鍵,選擇合并,出現(xiàn)合并對(duì)話框,在起始路徑和版本號(hào)中選擇分支的最新版本,在結(jié)束路徑中選擇主線的最新版本,然后單擊合并,合并后,提示框內(nèi)提示有文件更新,打開更新的文件一看,原來(lái)是主線上的內(nèi)容把分支上的覆蓋了。
總結(jié)操作問(wèn)題:合并的起始和結(jié)束路徑不是同一路徑,而是主線和分支兩個(gè)不同的路徑
三、我把這個(gè)問(wèn)題發(fā)到論壇,pcplayer指出了我的錯(cuò)誤,即“起始選擇主線的最新版本,結(jié)束使用分支的最新版本”,并指明“應(yīng)該選擇一條線上的兩個(gè)版本,這兩個(gè)版本間的改動(dòng)會(huì)以打補(bǔ)丁的形式合并到另外一條線上”,于是看了一遍subversion中文手冊(cè)svnbook1.2版中第4章分支與合并,終于理解了合并的使用:
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)
3、正確的操作(對(duì)應(yīng)我的需求,將分支上的改動(dòng)合并到主線上):在主線的工作副本下單擊右鍵,合并,在起始范圍中選擇分支的54版本,結(jié)束范圍中選擇分支的最新版本(當(dāng)然也可以修改到中間的其他版本,例如65等),然后單擊合并即可。由于我的需求中主線和分支修改的是不同的文件,所以不會(huì)存在沖突,合并完后直接提交即可。
四、合并的工作是把主線或者分支上合并范圍內(nèi)的所有改動(dòng)列出,并對(duì)比當(dāng)前副本的內(nèi)容,由合并者手工修改沖突。如果當(dāng)前工作副本是主線的,則合并的范圍是分支上的改動(dòng),如果工作副本是分支的,則合并范圍是主線上的改動(dòng)。本節(jié)關(guān)于SVN分支和合并問(wèn)題介紹完畢。
【編輯推薦】