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

d m*_*d m 39 svn

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

  • *.merge-right.r5004 = trunk版本
  • *.merge-left.r4521 =?
  • *.working =分支版本

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

Dim*_*nek 54

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

HEAD被跑,SVN会尝试之间应用增量A9分支B的顶部,从一个分支

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

common
ancestor      left     right
(1)??????(3)??(5)??(7)??(8)??(9)  # branch A
     ?         ???????????
     ?              ?
     ??(2)??(4)??(6)              # branch B
               working
Run Code Online (Sandbox Code Playgroud)

如果三角洲干净利落,那一切都很好.

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

如果delta(5→8)没有触及那些线,那么一切都仍然很好.

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

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

如果您手动编辑这样的文件,您有几个选择---保持"正常"(您的版本),保持"正确"(他们的版本;其他分支版本)或手动合并更改.

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

但是,它对工具很有用."左→右"是变更集.

当你看到,例如:

<<<<<<< .working

    life_universe_and_everything = 13

||||||| .merge-left.r5

    life_universe_and_everything = "13"

=======

    life_universe_and_everything = "42"

>>>>>>> .merge-right.r8
Run Code Online (Sandbox Code Playgroud)

它告诉你6改为B分支A.

分支B有cd B; svn merge -r 5:8 ^/braches/A(整数,不是字符串).

最有可能的是,您的手动合并选择将更5改为8并保持整数.

  • 最后,我能理解的解释.谢谢! (5认同)
  • 我必须再次投票,非常棒的解释! (2认同)

eja*_*env 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
Run Code Online (Sandbox Code Playgroud)


Tic*_*kon 9

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

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


Laz*_*ger -2

您执行了 3 边合并,解决了冲突(当合并2 个不同的文件时)。此操作使用了 3 个源

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

r*** 扩展名刚刚添加到相同的文件名中,以便合并 3 个文件

成功合并并将冲突标记为已解决的临时文件后,如果我没记错的话,必须自动消失