對svn分支合併型別和深度的理解

2022-02-27 15:43:04 字數 3755 閱讀 3575

合併的工作是把主幹或者分支上合併範圍內的所有改動列出,並對比當前工作副本的內容,由合併者手工修改衝突,然後提交到伺服器的相應目錄裡。如果當前工作副本是主幹,則合併的範圍是分支上的改動,如果工作副本是分支的,則合併範圍是主幹上的改動,並且一定要注意,合併的起始位置url一定要和當前的工作副本的url是相同的。

一、合併乙個範圍的版本

此型別應用最為廣泛,主要是把分支中的修改合併到主幹上來。在主幹上點選右鍵選擇合併,然後選擇合併型別:合併乙個範圍的版本。合併的源url填寫的是要合併的分支的url,待合併的版本範圍如果為空,則指的是合併分支上所有的版本,即自從分支建立以來到分支當前最新版本的所有演變。如果只是選擇其中乙個版本,或者幾個版本,那麼就表示只是將制定的n個版本的變化合併到主幹上。如果只是選擇其中乙個版本,那麼表示只是選擇那個版本的修改,之前或之後的修改將不被採納。

二、復興合併

復興合併可以理解為是第一種合併型別的一種特例,在復興合併中,主幹可以理解為是自從開創分支之後沒有任何修改,而分支是經過修改的,而且合併中分支是沒有版本選擇的。經過復興合併,分支中所有的修改都會合併到主幹中,合併的結果將使得分支和主幹一模一樣,從而可以刪除分支。

三、合併兩個不同的樹

此型別與前兩種型別不同,第一種型別可以選擇分支合併的版本,主幹不能選擇版本;第二種型別是主幹和分支都不能選擇合併的版本;而這種型別則是無論是主幹還是分支都可以選擇合併的版本,即可以選擇過去的乙個主幹版本與分支的某個版本進行合併。合併的時候以選擇的分支版本為主,如果選擇的主幹版本與分支版本有不同的地方,合併時主幹部分將被放棄。

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

結束url:選擇要合併的分支的url。

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

例項:主幹a在95版本的時候建立分支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.txt從a刪除;

9、 我在a上選擇合併型別3,主幹97以前的版本,合併分支最新版本,結果是把test.txt加入a,而a中保留著test2.txt。

將分支合併到主幹上,首先需要在主幹的工作副本下進行,合併的範圍是從主幹的上次合併的版本開始到分支上最新的版本結束,如果是第一次合併,則從主幹建立分支的版本開始,所以每次合併要做好說明,在日誌中體現,不然忘記了下次再合併就有點麻煩。其實,應當盡量避免乙個分支合併多次,分支的作用一般為了解決bug,一旦bug對應結束了,分支的使命就結束了,以後再出現其他的問題,應當重新建立分支,這樣就不會出現多次合併的問題了。

分支的合併深度

合併深度:

一、工作副本:即你當前的工作目錄,一般預設為這個選項;

二、全遞迴:即你選擇的目錄的版本庫,包括了其下面的子檔案,子資料夾,包括子資料夾裡面的內容;

三、直接子節點,包括資料夾:即你選擇的目錄下面的檔案,資料夾,但是不包括資料夾裡面的子檔案,子資料夾;

四、僅檔案子節點:即你選擇的目錄下面的檔案,但不包括資料夾,當然不包括的資料夾下面的所有內容也都不納入合併範圍;

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

例項: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檔案顯示新增狀態,資料夾test21和test211以及裡面的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版本並不會合併到主幹中。在以後的合併中,如果選擇合併分支的22到24版本,那麼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下)裡換行是cr和lf(即\r\n或十六進製製碼0d 0a),而你行中只有cr,所以將要加乙個lf(即oa)。說得很明確了,其實lf就是line feed的簡寫。whitespace包括line feeds, tabs, spaces, and carriage returns。

SVN分支的合併深度 Depth介紹

合併深度 1,working copy 工作副本 即你當前的工作目錄,一般預設為這個選項 2,recursively 遞迴 即你選擇的目錄的版本庫,包括了其下面的子檔案,子資料夾,包括子資料夾裡面的內容 3,direct children 直接子節點 即你選擇的目錄下面的檔案,資料夾,但是不包括資料...

SVN主幹和分支的合併

1 在svn倉庫下新建專案,結構如下 project 專案名 trunks 主幹,branches 分支 tags 標籤 2 主幹內容合併到分支 分支需要改變,則右鍵分支進行合併 選擇分支目錄,選擇合併,合併兩個不同的樹,起始處 from 選擇當前目錄中需要改變的目錄或檔案的url,結束處 to 選...

SVN 合併的思考 SVN 分支合併主幹

今天在使用 svn 的過程中遇到了這麼乙個問題 我們在乙個月前從主幹上拉出了乙個分支,乙個月的開發過去了,發現不論是分支還是主幹上都進行了非常繁雜的修改,此時我們的測試要求先把主幹上的 合併到分支上進行測試,那麼現在問題來了,如何將主幹上的 合併到分支上呢?有關 svn 的合併的問題,其實都可以在這...