svn合并左,右和右之间的差异冲突后的工作文件

时间:2011-10-06 18:59:13

标签: svn

当从我的开发团队的主干执行'svn merge'到分支时,我们偶尔会遇到合并冲突,这些冲突产生带有后缀名称的文件:*.merge-right.r5004*.merge-left.r4521*.working。我在整个Subversions的文档中都进行了搜索,但是他们的解释并没有多大用处。我收集了以下内容:

  • * .incin-right.r5004 = trunk version
  • * .incin-left.r4521 =?
  • * .working = branch version

我似乎无法弄清merge-left.r4521是什么。如果答案是它只是分支的文件的旧版本,那么为什么4521?

5 个答案:

答案 0 :(得分:44)

假设有两个分支,分支A中的最后一个(HEAD)修订版本为9,而分支B中的修订版本为6.

运行cd B; svn merge -r 5:8 ^/braches/A时,svn会尝试在分支B顶部的分支A中应用58之间的增量。

(换句话说,变更集7和8将应用于B)

common
ancestor      left     right
(1)━━┱───(3)──(5)──(7)──(8)──(9)  # branch A
     ┃         └┄┄┄┄┬┄┄┄┄┘
     ┃              ↓
     ┗━(2)━━(4)━━(6)              # branch B
               working

如果三角洲干净利落,那就很好了。

假设在变更集3中修改了一些行,并且在变更集4中修改了相同的源行。

如果delta(5→8)没有触及那些线,那么一切都还是不错的。

如果delta(5→8)也修改了3和4所做的,则无法自动合并更改,并且svn将文件保留为冲突状态:

  • file ---带(工作,左,右)分隔的文件
  • file.working ---分支B @ 6
  • 中的文件状态
  • file.merge-left ---分支A @ 5
  • 中的文件状态
  • file.merge-right ---分支A @ 8
  • 中的文件状态

如果你手动编辑这样的文件,你有几个选择---保持“工作”(你的版本),保持“正确”(他们的版本;其他分支版本)或手动合并更改。

“左”本身并没有用,没有必要在文件中保留“左”(旧版本)。

然而,它对工具很有用。 “左→右”是变更集。

当你看到,例如:

<<<<<<< .working
foo = 13
||||||| .merge-left.r5
foo = "13"
=======
foo = "42"
>>>>>>> .merge-right.r8

它告诉您,"13"已更改为分支A中的"42"

分支B有13(整数,不是字符串)。

最有可能的是,您的手动合并选择是将13更改为42并保持整数。

答案 1 :(得分:13)

file.merge-left.r4521是左侧分支(即原点)中此文件的最新更改右侧分支(目标)创建之前。

换句话说,merge-left.r4521它是要合并的文件的第一个版本

with merge-right.r5004(目标分支的最新版本)

例如,假设你想合并左右分支,如下所示:

Left   1   2   f.3   4   f.5   6    7    f.9    11 

Right                                  8    f.10    f.12   13


Right is created in 8 ( is a copy of 7 )

file 'f' has been modified in 3, 5, 9, 10, 12

The merge of file 'f' will occur between 7 and 13 because

7 is the latest version of file f in Left before Right was created

13 is the latest version of Right

答案 2 :(得分:9)

  • 'file.py.merge-left.rxxx`显示冲突左侧的合并结果
  • 'file.py.merge-right.ryyy`显示冲突右侧的合并结果
  • 'file.py.working`显示您未更改的工作副本
  • 'file.py`显示SVN尝试合并

这个问题类似于stackoverflow.com/questions/1673658/svnmerge-workflow,但这个问题更具体地说明了冲突文件的内容。

答案 3 :(得分:0)

似乎&#34;离开&#34; file是trunk和branch中文件相同的最后一个版本(对于你的问题,但它通常在source和dest之间)。

如果您从未将主干中的更改合并到您的分支中,那么当执行分支(副本)时,这将是主干的版本。否则,它是已合并并提交到此分支的中继的最后一个版本。

左侧和右侧是用于创建将作为补丁应用于工作文件的差异的内容。

答案 4 :(得分:-2)

您执行了3方合并投注冲突解决(合并 2个不同文件时)。这个操作使用了3个来源

  • “您的”文件(来自WC或来源位置,具体取决于参数)
  • “他们的”文件(必须合并带有更改的文件)
  • “base”文件(文件1-2的共同祖先)

r ***扩展只是添加到相同的文件名,以便在合并时有3个文件

成功合并并标记冲突后,解析后的临时文件必须自动消失,如果我的记忆能很好地为我服务