当执行从我的开发团队的主干到分支的“svn合并”时,我们偶尔会遇到合并冲突,这会产生带有后缀名称的文件:*.merge-right.r5004
、*.merge-left.r4521
和*.working
。我搜索了所有Subversion的文档,但它们的解释并没有太多用处。我收集了以下信息:
我好像搞不懂merge-left.r4521
是什么。如果答案是它只是分支中文件的一个较旧版本,那么为什么是4521呢?
发布于 2016-05-31 16:40:45
假设有两个分支,分支A
中的最后一个(HEAD
)修订是9
,而分支B
中的修订是6
。
当运行cd B; svn merge -r 5:8 ^/braches/A
时,svn将尝试在5
和8
之间应用增量,将增量从分支A
应用到分支B
之上。
(换句话说,变更集7
和8
将应用于B
)
common
ancestor left right
(1)━━┱───(3)──(5)──(7)──(8)──(9) # branch A
┃ └┄┄┄┄┬┄┄┄┄┘
┃ ↓
┗━(2)━━(4)━━(6) # branch B
working
如果增量应用得很干净,一切都是好的。
假设在更改集3
中修改了一些行,并且在更改集4
中以不同的方式修改了相同的源行。
如果增量(58
→)没有触及这些线,那么一切仍然是好的。
如果delta (5
svn 8
)还修改了3
和4
所做的操作,则无法自动合并更改,并且svn会使文件处于冲突状态:
file
-带有(working
,left
,right
) delimitedfile.working
的文件-分支B@6
file.merge-left
中文件的状态-分支A@5
file.merge-right
中文件的状态-分支A@8
中文件的状态
如果您手动编辑这样的文件,您有几个选择-保留working
(您的版本)、保留right
(它们的版本;另一个分支版本)或手动合并更改。
Left
本身没有任何用处,在文件中保留left
(他们的旧版本)是没有意义的。
然而,它对工具很有用。leftright
→是变更集。
例如,当您看到以下内容时:
<<<<<<< .working
life_universe_and_everything = 13
||||||| .merge-left.r5
life_universe_and_everything = "13"
=======
life_universe_and_everything = "42"
>>>>>>> .merge-right.r8
在分支A
中,"13"
(str)被更改为"42"
。
分支B
有13
(int)。
当您手动协调此冲突时,可能需要42
(int)。
发布于 2012-10-01 21:00:27
-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
发布于 2012-03-02 04:38:36
这个问题类似于stackoverflow.com/questions/1673658/svnmerge-workflow,但这个问题更具体地说明了冲突文件的内容。
https://stackoverflow.com/questions/7679113
复制相似问题