たとえば、ベース バージョン X と 2 つの異なる派生バージョン A および B の間で (Python で) 3 方向の差分/マージ アルゴリズムを実装しようとしていますが、いくつかの変更を処理する方法がわかりません。
X から A へ、および X から B への行ごとの差分があります。これらの差分は、行ごとに=
、行が変更されていない+
場合、行が追加された場合-
行が削除されたc
場合、および行が変更された場合 (単に の-
直後に が続き+
、行が削除されてから置き換えられ、効果的に変更されたことを示します)。
現在、A-diff と B-diff の対応するオペコードを比較して、それらをマージする方法を決定しようとしています。これらのオペコードの組み合わせのいくつかは簡単です:どちらのバージョンも行を変更していないこと=
を意味するため、元のコードを保持します。とは、一方に行が追加され、他方には変更が加えられていないことを意味するため、追加を受け入れて、行を追加した側のみ次の行に進みます。とは、一方の行が変更され、もう一方の側で同じ行が削除されたため、ユーザーが解決しなければならない競合です。=
+
=
-
c
+
しかし、 aと a -
、または a+
と aをどうするかで苦労していc
ます。たとえば最初のケースでは、片側に新しい行を追加し、反対側で後続の行を削除しました。厳密には、これは競合ではないと思いますが、追加がその行があることに依存しているとしたらどうでしょうか? それは全体に当てはまると思います(ある場所に追加されたものは、別の場所にあるものに依存して意味をなす場合があります)。2 番目のケースも同様で、片側に行を追加し、反対側に後続の行を変更しましたが、追加は行の元のバージョンに依存している可能性があります。
これを処理するための通常のアプローチは何ですか?