GNU diff3(三向合并)给出了意想不到的结果

时间:2010-10-14 08:46:52

标签: merge gnu diff3

假设文件MINE和YOURS是OLD的后代。

FILE_MINE =

abc
def
ghi

FILE_OLD =

abc
jkl
ghi

FILE_YOURS =

abc
def
ghi

命令diff3 -m MIND OLD YOURS给出:

abc
<<<<<<< OLD
jkl
=======
def
>>>>>>> YOURS
ghi

diff3无法解析MINE和YOURS做出相同的更改。

为什么呢?并且,有没有办法解决这个问题?

用这个搔痒你的大脑:

diff OLD MINDdiff OLD YOURS在输出中有相同的暗淡。

2c2
< jkl
---
> def

这些帅哥是否应该在三方合并期间“取消”?

1 个答案:

答案 0 :(得分:2)

您期望得到什么?

正如article describing diff3 utility所说:

  

...当所有三个输入文件不同时,此(合并)不能成为;如果只有旧版本不同,则 ;我们称之为冲突。当所有三个输入文件不同时,我们将冲突称为重叠

因此,您描述的案例被视为冲突。 '为什么这样?'你可能会问。因为diff3算法。您可以在同一页面找到描述:

  

您可以将此(合并)视为从您的中减去并将结果添加到 mine ,或者将其合并到我的将旧的变为你的变化

它无法正确解决差异,因为它没有适当的更改上下文。

如果你要说它应该使用其他方法,我会同意你的意见。但是它就是这样啊。 diff3并不完美,如果你想按照article

中所述的那样做,我建议你使用其他工具