我该如何理解 diff3 合并的条件是明确定义的?

我该如何理解 diff3 合并的条件是明确定义的?

diffutils 手册

diff3 mine older yours

您可以通过注意参数按字母顺序排列来记住它们的顺序。

您可以将其视为从您的中减去较旧的结果并将结果添加到我的结果中,或者将其合并到我的更改中,从而将较旧的更改合并到您的中。这种合并是明确定义的,只要我的和旧的匹配在每个这样的变化的附近。这不是真的当所有三个输入文件都不同时或者当只有年龄不同时;我们称之为冲突。当所有三个输入文件都不同时,我们将冲突称为重叠。

...

'-e'、'-3' 和 '-x' 选项仅选择未合并的更改,即我的和你的不同的更改;他们忽视从旧的变为你的,我的和你的是相同的,因为他们假设此类更改已经被合并。

“我的和旧的匹配在每个此类更改的附近”是什么意思?

“当只有旧的不同时”是否意味着我的和你的相同但与旧的不同?合并不是很简单吗?我们可以使用我的或你的吗?为什么在这种情况下没有明确定义合并?

三种情况如何覆盖所有可能的情况:

  • 当“我的和旧的在每个这样的变化的附近匹配”时

  • “当所有三个输入文件都不同时”

  • “当只有年龄不同时”?

“从旧的到你的,我的和你的相同的变化”与“当只有旧的不同时”的变化相同吗?

谢谢。

答案1

“我的和旧的匹配在每个此类更改的附近”是什么意思?

“我的和较旧的在每个此类更改的附近匹配”意味着在考虑“较旧”和“您的”之间的每个更改时,更改的上下文也可以在“我的”中找到。换句话说,就每个人在“旧的”和“你的”之间的变化而言,“我的”和“旧的”是相同的。考虑

mine            other           yours
------------------------------------------------
Some text       Some text       Some text
Some more text  Some more test  Changed text
Continues       Continues       Continues
Mine changes    This is gone    This is gone
The file ends   The file ends   The file ends

一行在“其他”和“我的”之间变化,另一行在“其他”和“你的”之间变化。当查看从“其他”到“你的”的变化时,我们在“我的”中发现相同的上下文,因此该变化可以应用于“我的”,没有歧义或冲突。

“当只有旧的不同时”是否意味着我的和你的相同但与旧的不同?

是的。

合并不是很简单吗?我们可以使用我的或你的吗?为什么在这种情况下没有明确定义合并?

“明确定义”的定义是,从“older”到“yours”的变化上下文与“mine”中的上下文相同。当“我的”和“你的”相同且与“旧的”不同时,根据定义,这种变化是不明确的。

这可能看起来令人惊讶,但三向合并的指导原则是任何冲突,即使它导致相同的内容,也必须由用户识别和检查。我手头没有例子,但确实发生了“我的”和“你的”中给定的行相同的情况,但考虑到正在合并的其他更改,合并结果中的原样并不理想。

另一种考虑方式是,三向合并的目的是调和两个不同的历史:从“旧的”到“我的”的历史,以及从“旧的”到“你的”的历史。即使两种历史得出相同的内容,也需要重新评估,而不是盲目套用。

开发人员diff3确实意识到无论如何都应该经常应用此类更改; 、-e-3-x选项可以执行此操作。

这三种情况如何涵盖所有可能的情况?

第一个案例描述了全局分析,但我认为其他两个案例应该在单个更改的背景下理解。如果我们考虑每次更改(从“较旧”到“您的”)查看的所有三个案例,它们将变为(请记住“较旧”和“您的”是不同的):

  • “我的”和“旧的”是相同的
  • “我的”和“旧的”是不同的,“我的”和“你的”是不同的
  • “我的”和“旧的”是不同的,而“我的”和“你的”是相同的

考虑真值表:

mine == older    mine == yours    older == yours    Case
--------------------------------------------------------
     Yes              Yes               Yes         N/A
     Yes              Yes               No          Imp.
     Yes              No                Yes         N/A
     Yes              No                No          1
     No               Yes               Yes         N/A
     No               Yes               No          3
     No               No                Yes         N/A
     No               No                No          2

N/A 表示不考虑该案例:从“旧的”到“您的”没有变化。小鬼。意味着这种情况是不可能的(通过平等的传递性)。这说明三种情况足以涵盖所有可能性。

“从旧的到你的,我的和你的相同的变化”与“当只有旧的不同时”的变化相同吗?

是的。

答案2

它在每个中都有明确的定义mine,并且yours是对 的更改older,因此它们删除了文本;在不同的地方添加文本;或者他们更改文本,但不要更改相同的文本。

也就是说,如果我们都改变相同的东西(以不同的方式),或者如果我们在同一个地方添加一些东西,那么它不知道以什么顺序放置它们,那么计算机就无法知道想要什么。

相关内容