我正在尝试在基本版本 X 和两个不同的衍生版本 A 和 B 之间实现三向差异/合并算法(在 python 中),但我无法弄清楚如何处理一些更改。
我有一个从 X 到 A 以及从 X 到 B 的逐行差异。这些差异为每一行提供一个“操作码” =
,如果该行没有改变,+
如果添加了一行,-
如果该行被删除,并且c
该行被更改(这只是一个-
紧跟一个+
,表示一行被删除然后替换,有效地修改)。
现在我正在比较来自 A-diff 和 B-diff 的相应操作码,以尝试决定如何合并它们。其中一些操作码组合很简单:这意味着两个版本都没有改变行,所以我们保留原来的=
。并且表示在一侧添加了一行,而在另一侧没有进行任何更改,因此接受添加并仅在添加该行的一侧前进到下一行。并且是用户必须解决的冲突,因为一侧更改了一行,另一侧删除了同一行。=
+
=
-
c
但是,我正在为如何处理 a+
和 a-
或 a+
和 a而苦苦挣扎c
。例如,在第一种情况下,我在一侧添加了新行,并在另一侧删除了后续行。严格来说,我不认为这是一个冲突,但是如果添加依赖于那条线呢?我想这适用于整个事情(在一个地方添加的东西可能依赖于其他地方的东西才有意义)。第二种情况也是类似的,我一边加了一行,另一边改了一行,但是添加的可能是依赖原版的行。
处理此问题的正常方法是什么?