簡體   English   中英

為什么此Subversion合並會導致樹沖突而不是合並沖突?

[英]Why does this Subversion merge lead to a tree conflict instead of a merge conflict?

我本來希望文件a.txt發生合並沖突,因為它的第2行同時在trunkbranch/featurex上更改了。

  1. 為什么我會遇到樹沖突而不是合並沖突?
  2. 如何顯示沖突? svn diff嗎?
  3. 如何解決此沖突?

重現情況的示例

要重現樹沖突,您可以在trunkbranches/featurex上進行更改,並嘗試將trunk合並到branches/featurex

創建一個分支:

PS C:\> mkdir demo
PS C:\> cd demo
PS C:\demo> svnadmin create svnrepo
PS C:\demo> cd workspace
PS C:\demo\workspace> mkdir trunk
PS C:\demo\workspace> mkdir branches
PS C:\demo\workspace> mkdir tags
PS C:\demo\workspace> svn add trunk
PS C:\demo\workspace> svn add branches
PS C:\demo\workspace> svn add tags
PS C:\demo\workspace> svn ci -m "Create SVN default folders"
PS C:\demo\workspace> cd trunk
PS C:\demo\workspace\trunk> echo "trunk: line1" > a.txt
PS C:\demo\workspace\trunk> svn add .\a.txt
PS C:\demo\workspace\trunk> svn ci -m "1st commit on trunk"
PS C:\demo\workspace\trunk> svn copy . ..\branches\featurex
PS C:\demo\workspace\trunk> cd ..
PS C:\demo\workspace> cd .\branches
PS C:\demo\workspace\branches> svn ci -m "Create branch for feature x"
Adding         featurex
Adding  (bin)  featurex\a.txt

提交更改主干:

PS C:\demo\workspace\trunk> echo "trunk: line2" >> .\a.txt
PS C:\demo\workspace\trunk> svn ci -m "2nd commit on trunk"

在分支上提交更改(在同一行上以創建合並沖突):

PS C:\demo\workspace\branches\featurex> svn up
PS C:\demo\workspace\branches\featurex> echo "branch: line2" >> .\a.txt
PS C:\demo\workspace\branches\featurex> svn ci -m "1st commit on branch"

合並中繼到分支:

PS C:\demo\workspace\branches\featurex> svn up
PS C:\demo\workspace\branches\featurex> svn merge file:///c:/demo/svnrepo/trunk
--- Merging r2 through r5 into '.':
   C a.txt
--- Recording mergeinfo for merge of r2 through r5 into '.':
 U   .
Summary of conflicts:
  Tree conflicts: 1
PS C:\demo\workspace\branches\featurex>

事實是:意外的樹沖突。

a.txt的內容不顯示任何具有合並沖突的合並,而僅顯示具有以下內容的“分支版本”:

trunk: line1
branch: line2

Subversion版本1.7.8(r1419691)編譯於2012年12月12日,21:11:09

 PS C:\\demo\\workspace\\trunk> svn copy . ..\\branches\\featurex PS C:\\demo\\workspace\\trunk> cd .. PS C:\\demo\\workspace> cd .\\branches PS C:\\demo\\workspace\\branches> svn ci -m "Create branch for feature x" 

事實證明,這不是創建分支的正確方法

 Adding featurex Adding (bin) featurex\\a.txt 

沒有提及它們是副本。 要復制它們,源必須是存儲庫URL(目標也應該是)。 嘗試使用以下方法創建分支:

PS C:\demo\workspace\trunk> svn copy -m "Create branch for feature x" "^/trunk" "^/branches/featurex"

(當您在工作副本中時, ^是存儲庫根目錄的別名),后跟svn update 甚至可以說是svn switch -您不應簽出多個分支,只能在一次提交而不是三個提交中創建初始結構!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM