SVN merge 三種方式

一、Merge a range of revisions服務器

二、Reintegrate a branchsvn

三、Merge two different trees字體

svn分支合併類型和深度的理解:spa

合併的工做是把主幹或者分支上合併範圍內的全部改動列出,並對比當前工做副本的內容,由合併者手工修改衝突,而後提交到服務器的相應目錄裏。若是當前工做副本是主幹,則合併的範圍是分支上的改動,若是工做副本是分支的,則合併範圍是主幹上的改動,而且必定要注意,合併的起始位置URL必定要和當前的工做副本的URL是相同的版本控制

1、合併一個範圍的版本日誌

此類型應用最爲普遍,主要是把分支中的修改合併到主幹上來。在主幹上點擊右鍵選擇合併,而後選擇合併類型:合併一個範圍的版本。合併的源URL填寫的是要合併的分支的URL,待合併的版本範圍若是爲空,則指的是合併分支上全部的版本,即自從分支建立以來到分支當前最新版本的全部演變。若是隻是選擇其中一個版本,或者幾個版本,那麼就表示只是將制定的n個版本的變化合併到主幹上。若是隻是選擇其中一個版本,那麼表示只是選擇那個版本的修改,以前或以後的修改將不被採納。orm

2、復興合併遞歸

復興合併能夠理解爲是第一種合併類型的一種特例,在復興合併中,主幹能夠理解爲是自從開創分支以後沒有任何修改,而分支是通過修改的,並且合併中分支是沒有版本選擇的。通過復興合併,分支中全部的修改都會合併到主幹中,合併的結果將使得分支和主幹如出一轍,從而能夠刪除分支。同步

3、合併兩個不一樣的樹it

此類型與前兩種類型不一樣,第一種類型能夠選擇分支合併的版本,主幹不能選擇版本;第二種類型是主幹和分支都不能選擇合併的版本;而這種類型則是不管是主幹仍是分支均可以選擇合併的版本,便可以選擇過去的一個主幹版本與分支的某個版本進行合併。合併的時候以選擇的分支版本爲主,若是選擇的主幹版本與分支版本有不一樣的地方,合併時主幹部分將被放棄。

起始URL:選擇主幹目錄的URL(應當和當前工做副本的URL一致,這個是所謂的合併點)

結束URL:選擇要合併的分支的URL

起始和結束的版本:通常起始版本應當找到最後一次同步時的版本,若是從沒有同步過(第一次合併),則選擇建立分支時的版本,結束版本通常是最新版本,若是你不想將某些內容合併進主幹的話,也能夠選擇一個合併點。

實例:

主幹A95版本的時候建立分支B,此時兩棵樹都是95版本

1 我在分支B上增長文件test.txt,提交。此時版本庫升級到了96版本;

2 我在A上選擇合併類型1,合併分支最新版本,結果是把test.txt加入A

3 我在A上選擇合併類型2,合併分支最新版本,結果同上;

4 我在A上選擇合併類型3,合併分支最新版本,結果同上;

5 我在A上增長文件test2.txt,提交,此時版本庫升級到了97版本;

6 我在A上選擇合併類型1,合併分支最新版本,結果是把test.txt加入A

7 我在A上選擇合併類型2,合併分支最新版本,結果是把test.txt加入A

8 我在A上選擇合併類型3,主幹選擇當前97版本,合併分支最新版本,結果是把test.txt加入A,把test2.txtA刪除;

9 我在A上選擇合併類型3,主幹97之前的版本,合併分支最新版本,結果是把test.txt加入A,而A中保留着test2.txt

將分支合併到主幹上,首先須要在主幹的工做副本下進行,合併的範圍是從主幹的上次合併的版本開始到分支上最新的版本結束,若是是第一次合併,則從主幹建立分支的版本開始,因此每次合併要作好說明,在日誌中體現,否則忘記了下次再合併就有點麻煩。其實,應當儘可能避免一個分支合併屢次,分支的做用通常爲了解決bug,一旦bug對應結束了,分支的使命就結束了,之後再出現其餘的問題,應當從新創建分支,這樣就不會出現屢次合併的問題了。

 

分支的合併深度

合併深度:

1、工做副本:即你當前的工做目錄,通常默認爲這個選項;

2、全遞歸:即你選擇的目錄的版本庫,包括了其下面的子文件,子文件夾,包括子文件夾裏面的內容;

3、直接子節點,包括文件夾:即你選擇的目錄下面的文件,文件夾,可是不包括文件夾裏面的子文件,子文件夾;

4、僅文件子節點:即你選擇的目錄下面的文件,但不包括文件夾,固然不包括的文件夾下面的全部內容也都不歸入合併範圍;

5、僅此項:沒有任何合併內容。

實例:

1、主幹test文件夾下面有text.txt文件,test文件夾建立分支test2

2、在test2文件夾下面增長test21文件夾,在test21文件夾下面增長文件夾test211,在test211文件夾下面增長文件test211.txt;修改test2文件夾下面的文件test.txt,增長文件test2.txt。提交

3、右鍵test文件夾合併test2文件夾,選擇工做副本。則test文件夾中原先的test.txt文件則顯示修改狀態,test2.txt文件顯示新增狀態,文件夾test21test211以及裏面的test211.txt文件都顯示爲新增狀態。選擇將test文件夾svn還原,則新增狀態下的文件夾或者文件顯示爲無版本控制狀態,原先的test.txt還原爲常規常態。

4、右鍵test文件夾合併test2文件夾,選擇全遞歸,結果和3同樣。可是咱們以前的test文件夾和倉庫上的test的內容是一致的,若是不一致,那麼選全遞歸,是已倉庫版本爲標準。選工做副本,顧名思義,則以你本地的工做副本文件爲主,分支上有而工做副本中沒有的文件夾或文件則不進行比較合併。

5、右鍵test文件夾合併test2文件夾,選擇直接子節點,包含文件夾。則test文件夾中原先的test.txt文件顯示爲修改狀態,test2.txt文件顯示爲新增狀態,test21文件夾顯示爲新增狀態,可是其裏面內容則爲空,那麼就證實了分支中test21文件夾如下的內容並無合併到主幹test中來,合併行爲只是選取了當前目錄。選擇將test文件夾svn還原,則新增狀態下的文件夾或者文件顯示爲無版本控制狀態,原先的test.txt還原爲常規狀態。

6、右鍵test文件夾合併test2文件夾,選擇僅文件子節點。則test文件夾中原先的test.txt文件顯示爲修改狀態,test2.txt文件顯示爲新增狀態,分支test2中的test21文件夾沒有合併到test中來。選擇將test文件夾svn還原,則新增狀態下的文件顯示爲無版本控制狀態,原先的test.txt還原爲常規狀態。

7、右鍵test文件夾合併test2文件夾,選擇僅此項。則test文件夾顯示爲修改狀態,可是內容沒有任何改動。將test文件夾svn還原,則該文件夾顯示爲常規狀態。

只記錄合併(阻止這些版本未來被合併)

選擇此項意味着並無實際的合併動做,只是在未來的合併過程當中,svn將過濾掉此版本的修改動做。例如,我在合併的過程當中,選擇對分支的23版本只記錄合併(阻止這個版本未來被合併),那麼23版本並不會合併到主幹中。在之後的合併中,若是選擇合併分支的2224版本,那麼23版本將被忽略,咱們也能夠看到,在選擇版本的對話框上,23版本的字體是灰色的。因此要慎重使用這個選項,一旦使用了,那麼表示這個版本在之後的合併中就不能再使用了。

忽略祖先:若是在分支上有一個文件曾經被刪除過,後來又加了一個同文件名的文件,那麼在merge的時候svn會識別到這兩個文件不是同一個祖先而直接覆蓋舊文件增長新文件。而實際上我是要對這兩個不一樣祖先的文件進行合併的,這個時候就須要使用svn merge --ignore-ancestry 忽略祖先來進行合併才能保證正確。

實例:

1 將主幹test建立分支test1

2 test1文件夾下的test.txt文件刪除,提交;

3 test1下建立文件test.txt,提交;

4 test1合併到主幹test,若是默認選擇,則提示將test1中的test.txt文件替換test文件夾中的test.txt文件;若是選擇了忽略祖先,那麼系統將把兩個test.txt做比較,必要時提示衝突。

carriage return是一個符號(指回車符號CR),而通常在代碼文件或文體文件裏(WINDOWS下)裏換行是CRLF(即\r\n或十六進制碼0D 0A),而你行中只有CR,因此將要加一個LF(即OA)。說得很明確了,其實LF就是line feed的簡寫。whitespace包括line feeds, tabs, spaces, and carriage returns

合併狀況:

1.        將分支的最新版本合併到主幹。

2.        將分支的某個版本合併到主幹

3.        將分支的所有更改合併到主幹

相關文章
相關標籤/搜索