【问题标题】:Why does this Subversion merge lead to a tree conflict instead of a merge conflict?为什么这个 Subversion 合并会导致树冲突而不是合并冲突?
【发布时间】:2014-11-26 10:04:52
【问题描述】:

问题

我预计文件 a.txt 中会出现合并冲突,因为它的第 2 行同时在 trunk 和 branch/featurex 上发生了更改。

  1. 为什么会出现树冲突而不是合并冲突?
  2. 如何显示冲突? svn diff?
  3. 如何解决此冲突?

重现情况的示例

要重现树冲突,您可以对trunk 和branches/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

【问题讨论】:

    标签: svn tree-conflict


    【解决方案1】:
    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——你不应该检查多个分支,除非在一次提交而不是三个提交中创建初始结构!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-11
      • 2012-12-08
      相关资源
      最近更新 更多