SVN分支與合并操作(精)_第1頁
SVN分支與合并操作(精)_第2頁
免費預(yù)覽已結(jié)束,剩余8頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、SVN分支與合并注意事項:?bra nch分支)主要用于新功能的開發(fā)?合并發(fā)生在本地working copy(工作副本),只要你不提交就不會影響到repository(版本庫)?合并前一定要先update commit, 保證不會out of day,并將本地的修改保存到repository,這樣當(dāng)你發(fā)現(xiàn)合并錯了可以隨時還原到合并前?branch和trunk并行開發(fā)的過程中,要經(jīng)常同步,將trunk的修改合并到bran ch,合并時選擇Merge a range of revisio n?branch最后合并回trunk時,merge type選擇Reintegrate a branch ?主

2、要步驟:建立分支check out分支在分支進行新功能開發(fā)在主干進行BUG修改每 次主干修改完BUG提交后同步修改到分支手動排除沖突提交分支代碼繼 續(xù)分支功能開發(fā)直到最后功能開發(fā)完整合并會主干。一、建立分支1創(chuàng)建bran ch在主干目錄上右鍵,依次選擇TortoiseSVN - Branch/tag,在彈出窗口的To URL中填入分支的地址,在這里目標(biāo)revision選擇HEAD revision,如下圖所示,添加log后點擊ok分支便建立了。這個操作速度非??欤陆ǖ腷ran ch在repository中其實只是一個指向trunk某個revision的軟連接而已,并沒有真的復(fù) 制文件。2、C

3、heck out分支右鍵分支路徑TestSVN目錄選擇TortoiseSVN Update即可將剛剛建立的分支下載回本地。進入分支目錄下你會發(fā)現(xiàn)其文件結(jié)構(gòu)和主干的一模一樣。3、 保持分支一直都是最新版本上面建立是為了branch和trunk在獨立、并行地開發(fā)。在主干進行BUG的修改,分支則進行新功能的開發(fā)。為了防止在錯誤”的道路上越走越遠,主干所做的修改必須經(jīng)常更新到分支,使新功能一直都是在最新的系統(tǒng)下開發(fā)的(將trunk合 并至Ubranch)。二、進行合并1將trunk中的修改同步到branch首先,在本地trunk中先updateMMZ.Lfcii.Z4:_!DRL *-FA-*EJL1

4、湘 5.fs削 j wiUu*iRWiirmwBanrwsMM * CtukwttvLfiLihr円百 J:|MM *bHJhEW-*;rnfV|iw:iL WmrEr%22 Re丹 F. i3*1 Awi HMBR Hrv VHrtoflAiVVir Mfwf鼻丹.M4 14葉 T-AiRrwi- Mdat*v Mnfldd Irnd一下,有沖突的解決沖突,保證trunk和repository已經(jīng)完全同步,然后在/branches /MyProject上右鍵,依次選擇TortoiseSVN -“Merge.,在彈出的窗口中選擇第一項Merge a range of revision,這個類型

5、的Merge已經(jīng)介紹得很清 楚,適用于將某個分支或主線上提交的多個revision間的變化合并到另外一個分 支上。點擊Next,出現(xiàn)如下界面:由于是要從trunk合并到branch,理所當(dāng)然這里的URL to merge from應(yīng)該填trunk的路徑,Revision range to merge很好理解,就是你要將trunk的哪些revision所對應(yīng)的變化合并到branch中,可以是某一連串的revision,比如4-7,15-HEAD,也可以是某個單獨的revision號。由于我們是經(jīng)常同步的,所以一般 都只需選最近的一次修改同步起來就可以了。點擊n ext后出現(xiàn)下圖:比加.IF 曲甘

6、ftj-i*-*WI J*嚴(yán)uhR 弔 iri 皿 :I-Piw!sr L 士 lb 尊t- 1曲亠Iri. CJIIJI C Ma,. Ii fr.|rqTin 49.W1 Qvm IX ;HVtli iffu-ven rf 舟 HI h r Jb4 時 fh frfJ4#在這里只需保留默認(rèn)設(shè)置即可。在點擊Merge按鈕前你可以先Test merge測試合并)一把,看成功與否,以及merge的詳細信息。如果詳細信息出現(xiàn)如下圖紅色字 體,證明有沖突,sJ7 ,iljf r*滬Tftarw 1-lw卄祁I(lǐng)JvalFwriiTfPU-F H mfafc1!屯IwAdhi litf rirs需要開發(fā)

7、人員手動去合并,排除沖突。-Jha |aCfalr r*ed iki*14 ILedt elaL MT pi點擊Merge按鈕后trunk所做的修改將同步到branch中,如果有沖突的會彈出如 下提示窗口。第一行的意思是以哪個版本為主,如果選擇了,會忽略分支的改 動,直接同步主線的修改,建議不要使用。第二行的意思是編輯沖突,一般不可用。第三行,Resolve later稍候解決當(dāng)前沖突,后面那個是稍候處理所有沖突 這里我們我們選擇Resolve all later,這樣就需要我們手工進行合并了。點擊Resolve all lateriJMfLfciiLrtietfe LbLtrfNgie-le

8、Rj-jma之后,會在分支相應(yīng)目錄下面建立沖突的版本,如圖:這些多出來的以.r結(jié)尾的沖突文件其實就是主干的歷史修改版本,右鍵可以選擇 用文本編輯軟件打開,將沖突的相關(guān)內(nèi)容手動復(fù)制到分支文件里面,然后刪除這 些沖突的文件。2、 提交合并后的branch至此,branch已經(jīng)完全和trunk同步,branch和trunk的代碼相處很融洽,沒有任 何沖突,如果branch已經(jīng)開發(fā)結(jié)束,那是時候?qū)ranch合并回trunk了,當(dāng)然, 如果branch還要繼續(xù)開發(fā),那你將不斷地重復(fù)上面的這幾個步驟。3、 將branch合并回trunk在主線的目錄上右鍵, 依次選擇TortoiseSVN - Merge

9、., 在彈出的窗口中,Merge type選擇第二項Reintegrate a branch:這種類型的合并適合在分支開發(fā)結(jié) 束后將所有的改動合并回主線。點擊next后出現(xiàn)如下窗口:在這里,F(xiàn)rom URL選擇主干地址,無需選擇revision號,Reintegrate上面選擇 的第二項叫做復(fù)興合并)會將branch上所有修改合并到trunk。后面的步驟和上文 第9步中的一樣,不再啰嗦了。如無意外,branch將成功合并到trunk,你需要做 的只是將合并后的trunk趕緊commit,至此可以刪除分支了!以下內(nèi)容僅供有興趣深究的同學(xué)查看 對svn分支合并類型和深度的理解: 合并的工作是把主干

10、或者分支上合并范圍內(nèi)的所有改動列出,并對比當(dāng)前工作副 本的內(nèi)容,由合并者手工修改沖突,然后提交到服務(wù)器的相應(yīng)目錄里。如果當(dāng)前 工作副本是主干,則合并的范圍是分支上的改動,如果工作副本是分支的,則合 并范圍是主干上的改動,并且一定要注意,合并的起始位置URL一定要和當(dāng)前的工作副本的URL是相同的。一、合并一個范圍的版本此類型應(yīng)用最為廣泛, 主要是把分支中的修改合并到主干上來。 在主干上點擊右 鍵選擇合并,然后選擇合并類型:合并一個范圍的版本。合并的源URL填寫的是要合并的分支的URL,待合并的版本范圍如果為空,則指的是合并分支上所有 的版本,即自從分支創(chuàng)建以來到分支當(dāng)前最新版本的所有演變。如果只

11、是選擇其 中一個版本,或者幾個版本,那么就表示只是將制定的n個版本的變化合并到主干上。如果只是選擇其中一個版本,那么表示只是選擇那個版本的修改,之前或 之后的修改將不被采納。二、復(fù)興合并復(fù)興合并可以理解為是第一種合并類型的一種特例,在復(fù)興合并中,主干可以理 解為是自從開創(chuàng)分支之后沒有任何修改,而分支是經(jīng)過修改的,而且合并中分支 是沒有版本選擇的。經(jīng)過復(fù)興合并, 分支中所有的修改都會合并到主干中, 合并 的結(jié)果將使得分支和主干一模一樣,從而可以刪除分支。三、合并兩個不同的樹此類型與前兩種類型不同,第一種類型可以選擇分支合并的版本,主干不能選擇 版本;第二種類型是主干和分支都不能選擇合并的版本;而

12、這種類型則是無論是 主干還是分支都可以選擇合并的版本,即可以選擇過去的一個主干版本與分支的 某個版本進行合并。合并的時候以選擇的分支版本為主,如果選擇的主干版本與 分支版本有不同的地方,合并時主干部分將被放棄。起始URL:選擇主干目錄的URL(應(yīng)當(dāng)和當(dāng)前工作副本的URL一致, 這個是所 謂的合并點)結(jié)束URL:選擇要合并的分支的URL。起始和結(jié)束的版本:一般起始版本應(yīng)當(dāng)找到最后一次同步時的版本,如果從沒有 同步過(第一次合并),則選擇創(chuàng)建分支時的版本,結(jié)束版本一般是最新版本, 如果你不想將某些內(nèi)容合并進主干的話,也可以選擇一個合并點。實例:主干A在95版本的時候創(chuàng)建分支B,此時兩棵樹都是95版

13、本1、 我在分支B上增加文件test.txt,提交。此時版本庫升級到了96版本;2、 我在A上選擇合并類型1,合并分支最新版本,結(jié)果是把test.txt加入A;3、 我在A上選擇合并類型2,合并分支最新版本,結(jié)果同上;4、 我在A上選擇合并類型3,合并分支最新版本,結(jié)果同上;5、 我在A上增加文件test2.txt,提交,此時版本庫升級到了97版本;6、 我在A上選擇合并類型1,合并分支最新版本,結(jié)果是把test.txt加入A;7、 我在A上選擇合并類型2,合并分支最新版本,結(jié)果是把test.txt加入A;8我在A上選擇合并類型3,主干選擇當(dāng)前97版本,合并分支最新版本,結(jié)果 是把test.t

14、xt加入A,把test2.txt從A刪除;9、我在A上選擇合并類型3,主干97以前的版本,合并分支最新版本,結(jié)果是把test.txt加入A,而A中保留著test2.txt。將分支合并到主干上,首先需要在主干的工作副本下進行,合并的范圍是從主干 的上次合并的版本開始到分支上最新的版本結(jié)束,如果是第一次合并,則從主干 創(chuàng)建分支的版本開始,所以每次合并要做好說明,在日志中體現(xiàn),不然忘記了下 次再合并就有點麻煩。其實,應(yīng)當(dāng)盡量避免一個分支合并多次,分支的作用一般 為了解決bug,旦bug對應(yīng)結(jié)束了,分支的使命就結(jié)束了,以后再出現(xiàn)其他的 問題,應(yīng)當(dāng)重新建立分支,這樣就不會出現(xiàn)多次合并的問題了。分支的合并

15、深度合并深度:一、工作副本:即你當(dāng)前的工作目錄,一般默認(rèn)為這個選項;二、全遞歸:即你選擇的目錄的版本庫,包括了其下面的子文件,子文件夾,包 括子文件夾里面的內(nèi)容;三、直接子節(jié)點,包括文件夾:即你選擇的目錄下面的文件,文件夾,但是不包 括文件夾里面的子文件,子文件夾;四、僅文件子節(jié)點:即你選擇的目錄下面的文件,但不包括文件夾,當(dāng)然不包括 的文件夾下面的所有內(nèi)容也都不納入合并范圍;五、僅此項:沒有任何合并內(nèi)容。實例:1主干test文件夾下面有text.txt文件,把test文件夾創(chuàng)建分支test22、 在test2文件夾下面增加test21文件夾,在test21文件夾下面增加文件夾test211,

16、在test211文件夾下面增加文件test211.txt;修改test2文件夾下面的文件test.txt,增加文件test2.txt。提交3、 右鍵test文件夾合并test2文件夾,選擇工作副本。則test文件夾中原先的test.txt文件則顯示修改狀態(tài),test2.txt文件顯示新增狀態(tài),文件夾test21和test211以及里面的test211.txt文件都顯示為新增狀態(tài)。選擇將test文件夾svn還原,則新 增狀態(tài)下的文件夾或者文件顯示為無版本控制狀態(tài),原先的test.txt還原為常規(guī)常 態(tài)。4、 右鍵test文件夾合并test2文件夾,選擇全遞歸,結(jié)果和3一樣。但是我們之 前的tes

17、t文件夾和倉庫上的test的內(nèi)容是一致的, 如果不一致, 那么選全遞歸,是已倉庫版本為標(biāo)準(zhǔn)。選工作副本,顧名思義,則以你本地的工作副本文件為主,分支上有而工作副本中沒有的文件夾或文件則不進行比較合并。5、 右鍵test文件夾合并test2文件夾,選擇直接子節(jié)點,包含文件夾。則test文 件夾中原先的test.txt文件顯示為修改狀態(tài),test2.txt文件顯示為新增狀態(tài),test21文件夾顯示為新增狀態(tài),但是其里面內(nèi)容則為空,那么就證明了分支中test21文件夾以下的內(nèi)容并沒有合并到主干test中來,合并行為只是選取了當(dāng)前目錄。選 擇將test文件夾svn還原,則新增狀態(tài)下的文件夾或者文件顯示

18、為無版本控制狀 態(tài),原先的test.txt還原為常規(guī)狀態(tài)。6、右鍵test文件夾合并test2文件夾,選擇僅文件子節(jié)點。則test文件夾中原先 的test.txt文件顯示為修改狀態(tài),test2.txt文件顯示為新增狀態(tài),分支test2中的test21文件夾沒有合并到test中來。選擇將test文件夾svn還原,則新增狀態(tài)下的文件顯示為無版本 控制狀態(tài),原先的test.txt還原為常規(guī)狀態(tài)。7、 右鍵test文件夾合并test2文件夾,選擇僅此項。則test文件夾顯示為修改狀 態(tài),但是內(nèi)容沒有任何改動。將test文件夾svn還原,則該文件夾顯示為常規(guī)狀 態(tài)。只記錄合并(阻止這些版本將來被合并)選擇此項意味著并沒有實際的合并動作,只是在將來的合并過程中,svn將過濾掉此版本的修改動作。例如,我在合并的過程中,選擇對分支的23版本只記錄合并(阻止這個版本將來被合并),那么23版本并不會合并到主干中。在以后的合并中,如果選擇合并分支的22到24版本,那么23版本將被忽略

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論