svn merge:树冲突很奇怪

时间:2013-03-05 10:32:37

标签: svn tortoisesvn svn-merge tree-conflict

我在SVN中遇到树冲突。这很奇怪!

我有标准的Trunk,Branches,Tags结构,并遵循多个团队模型。 Branch1,Branch2从Trunk创建并且并行激活

遵循的步骤:
1. Branch1 Worknewfile.cBranch1中添加并提交了Merge 2. Merge:来自Branch1 - >中继线(成功;在主干中添加文件)
3. Branch2 Work:从Trunk向下合并 - >店2。 (成功;文件在Branch2中添加)
4. Merge:执行常规的Branch2工作并提交 5. newfile.c:从Branch2到Trunk =>此步骤会引发newfile.c

的树冲突

Branch2团队正在为>svn merge file:///E:/Treeconflict_test/svnRepo/Branches/Br2 Trunk --- Merging r3 through r8 into 'Trunk': C Trunk\src\ARTransactionFeeDto2.java U Trunk\pom.xml G Trunk Summary of conflicts: Tree conflicts: 1 >svn status Trunk M Trunk C Trunk\src\ARTransactionFeeDto2.java > local obstruction, incoming add upon merge M Trunk\pom.xml 获得他们根本没有触及的树冲突。 为什么会这样呢?请问任何建议,这可以避免吗?这个问题让我烦恼不已。

PS:我使用了TortoiseSVN客户端1.6.0和TortoiseSVN 1.6.16 - 32位(均单独使用)

合并错误(上面的步骤5):

>svn log -v file:///E:/Treeconflict_test/svnRepo
------------------------------------------------------------------------
r8 | rohit | 2013-03-05 16:30:35 +0530 (Tue, 05 Mar 2013) | 1 line
Changed paths:
   M /Branches/Br2/src/ARTransactionFeeDto2.java

br2 branch changes
------------------------------------------------------------------------
r7 | rohit | 2013-03-05 16:29:34 +0530 (Tue, 05 Mar 2013) | 1 line
Changed paths:
   M /Branches/Br2
   M /Branches/Br2/pom.xml
   A /Branches/Br2/src/ARTransactionFeeDto2.java (from /Trunk/src/ARTransactionF
eeDto2.java:6)

dowm-merge from Trunk to branch-Br2
------------------------------------------------------------------------
r6 | rohit | 2013-03-05 16:26:56 +0530 (Tue, 05 Mar 2013) | 1 line
Changed paths:
   M /Branches/Br2/pom.xml

br2 branch changes
------------------------------------------------------------------------
r5 | rohit | 2013-03-05 16:22:26 +0530 (Tue, 05 Mar 2013) | 1 line
Changed paths:
   M /Trunk
   M /Trunk/pom.xml
   A /Trunk/src/ARTransactionFeeDto2.java (from /Branches/Br1/src/ARTransactionFeeDto2.java:4)

up-merge from branch-Br1 to Trunk
------------------------------------------------------------------------
r4 | rohit | 2013-03-05 16:20:48 +0530 (Tue, 05 Mar 2013) | 1 line
Changed paths:
   M /Branches/Br1/pom.xml
   A /Branches/Br1/src/ARTransactionFeeDto2.java

br1 changes
------------------------------------------------------------------------
r3 | rohit | 2013-03-05 16:19:07 +0530 (Tue, 05 Mar 2013) | 1 line
Changed paths:
   A /Branches/Br2 (from /Trunk:2)

created branch br2
------------------------------------------------------------------------
r2 | rohit | 2013-03-05 16:18:57 +0530 (Tue, 05 Mar 2013) | 1 line
Changed paths:
   A /Branches/Br1 (from /Trunk:1)

created branch Br1
------------------------------------------------------------------------
r1 | rohit | 2013-03-05 16:18:13 +0530 (Tue, 05 Mar 2013) | 1 line
Changed paths:
   A /Branches
   A /Tags
   A /Trunk
   A /Trunk/pom.xml
   A /Trunk/src
   A /Trunk/src/ARTransactionFeeDelegateResponse.java
   A /Trunk/src/ARTransactionFeeDto.java
   A /Trunk/src/ResponseARTransFeeDtlsDto.java

initial commit Trunk
------------------------------------------------------------------------

PFB svn repo log(上面的步骤1-4):

{{1}}

3 个答案:

答案 0 :(得分:2)

在这个工作流程中,即使是1.6,也是不可能的。您必须显示所有命令和输出

根据日志,您是"XFAIL conflict from merge of add over versioned file"的受害者,在2009版"Tree Conflict"设计文档中提及。最重要的部分是

  

修正了r35341的预期

我不能说,如何将此修订版本转换为使用bugfix构建的TortoiseSVN。我将在最新的1.6(TortoiseSVN 1.6.16, Build 21511 - 32 Bit , 2011/06/01 19:00:35)上测试您的工作流程。

我使用的TortoiseSVN 1.7.11, Build 23600 - 32 Bit的日志(所有合并 - 基于GUI的本地存储库)

>svn log -v file:///Z:/Repo/
------------------------------------------------------------------------
r10 | Badger | 2013-03-05 17:32:32 +0600 (Вт, 05 мар 2013) | 2 lines
Changed paths:
   M /trunk
   M /trunk/Base.txt
   M /trunk/C1.txt
   M /trunk/C2.txt

Merge from branches/b2:

------------------------------------------------------------------------
r9 | Badger | 2013-03-05 17:27:42 +0600 (Вт, 05 мар 2013) | 1 line
Changed paths:
   M /branches/b2/Base.txt
   M /branches/b2/C1.txt
   M /branches/b2/C2.txt

Anfanglichen Deutsch Korperregion
------------------------------------------------------------------------
r8 | Badger | 2013-03-05 17:19:28 +0600 (Вт, 05 мар 2013) | 2 lines
Changed paths:
   M /branches/b2
   M /branches/b2/Base.txt
   M /branches/b2/C1.txt
   M /branches/b2/C2.txt
   A /branches/b2/Reference.txt (from /trunk/Reference.txt:7)

Merge from trunk

------------------------------------------------------------------------
r7 | Badger | 2013-03-05 17:15:29 +0600 (Вт, 05 мар 2013) | 1 line
Changed paths:
   M /trunk
   M /trunk/Base.txt
   A /trunk/Reference.txt (from /branches/b1/Reference.txt:6)

Merge B1 branch changes
------------------------------------------------------------------------
r6 | Badger | 2013-03-05 17:12:26 +0600 (Вт, 05 мар 2013) | 1 line
Changed paths:
   M /branches/b1/Base.txt
   A /branches/b1/Reference.txt

Structure reflected
------------------------------------------------------------------------
r5 | Badger | 2013-03-05 17:09:46 +0600 (Вт, 05 мар 2013) | 1 line
Changed paths:
   M /trunk/C1.txt
   M /trunk/C2.txt

Edition 1
------------------------------------------------------------------------
r4 | Badger | 2013-03-05 17:06:38 +0600 (Вт, 05 мар 2013) | 1 line
Changed paths:
   A /branches/b2 (from /trunk:3)

Branching for task2
------------------------------------------------------------------------
r3 | Badger | 2013-03-05 17:05:49 +0600 (Вт, 05 мар 2013) | 1 line
Changed paths:
   A /branches/b1 (from /trunk:2)

Branching for task1
------------------------------------------------------------------------
r2 | Badger | 2013-03-05 17:03:21 +0600 (Вт, 05 мар 2013) | 1 line
Changed paths:
   A /trunk/Base.txt
   A /trunk/C1.txt
   A /trunk/C2.txt

Basic set
------------------------------------------------------------------------
r1 | Badger | 2013-03-05 16:59:36 +0600 (Вт, 05 мар 2013) | 1 line
Changed paths:
   A /branches
   A /tags
   A /trunk

Imported folder structure
------------------------------------------------------------------------

<强>评论

我尽可能准确地重复你的行动

  • r2-r4 - 准备的测试区域:主干和两个分支
  • r5 - 改变后备箱以便有分歧的历史
  • r6 - 在分支b1(Reference.txt)中添加了新文件
  • r7 - 将分支b1合并到主干(Reference.txt出现在主干中)
  • r8 - 合并后的中继到分支b2(Reference.txt出现在b2中)
  • r9 - 更改了b2中的文件,Reference.txt未触动
  • r10 - 将b2合并到主干没有任何错误

添加-上

使用1.6.16进行测试,得到描述结果,即使我在合并树之前将预先合并在分支文件中编辑到

加载项2

该死!!!它在最新的1.7中也不起作用。它让我疯狂

答案 1 :(得分:1)

错误消息可能看起来很神秘,但基本上解释了这个问题:

  

本地阻塞,合并后传入

您正在将r3从BR2移植到r8到中继线。问题是在r7中添加了ARTransactionFeeDto2.java

r7 | rohit | 2013-03-05 16:29:34 +0530 (Tue, 05 Mar 2013) | 1 line
Changed paths:
   A /Branches/Br2/src/ARTransactionFeeDto2.java (from /Trunk/src/ARTransactionF
eeDto2.java:6)

...但是这样的更改无法移植到trunk,因为该文件已存在:

r5 | rohit | 2013-03-05 16:22:26 +0530 (Tue, 05 Mar 2013) | 1 line
Changed paths:
   A /Trunk/src/ARTransactionFeeDto2.java (from /Branches/Br1/src/ARTransactionFeeDto2.java:4)

Subversion提供了非常复杂的方法来避免它,但我建议您只使用TortoiseSVN进行合并,当提示r7中的冲突时,您选择保留本地文件(无论如何都与传入文件相同)。

答案 2 :(得分:0)

我尝试使用SVN 1.7按照这些步骤(尽可能没有实际可用的命令列表),它似乎按预期工作。

我认为它可能不适合您,因为在将分支合并回主干时需要使用'--reintegrate'选项。您是否确定每次从任一分支合并回主干时都使用此选项?

如果您确实使用了该选项,请忽略此答案。