当执行从我的开发团队的树干"svn的合并"成一个分支,我们偶尔会遇到撤并产生后缀名的文件冲突:*.merge-right.r5004,*.merge-left.r4521和*.working.我在整个Subversions的文档中都进行了搜索,但是他们的解释并没有多大用处.我收集了以下内容:
我似乎无法弄清楚是什么merge-left.r4521.如果答案是它只是分支的文件的旧版本,那么为什么4521?
Dim*_*nek 54
假设有两个分支,分支A中的最后一个(HEAD)修订版本为9,而分支B中的修订版本为6.
当HEAD被跑,SVN会尝试之间应用增量A和9分支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将文件保留为冲突状态:
如果您手动编辑这样的文件,您有几个选择---保持"正常"(您的版本),保持"正确"(他们的版本;其他分支版本)或手动合并更改.
"左"本身并没有用,没有必要在文件中保留"左"(旧版本).
但是,它对工具很有用."左→右"是变更集.
当你看到,例如:
<<<<<<< .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并保持整数.
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)
这个问题类似于stackoverflow.com/questions/1673658/svnmerge-workflow,但是这个问题更具体地说明了冲突文件的内容.
Laz*_*ger -2
您执行了 3 边合并,解决了冲突(当合并2 个不同的文件时)。此操作使用了 3 个源
r*** 扩展名刚刚添加到相同的文件名中,以便合并 3 个文件
成功合并并将冲突标记为已解决的临时文件后,如果我没记错的话,必须自动消失