2

たとえば、ベース バージョン X と 2 つの異なる派生バージョン A および B の間で (Python で) 3 方向の差分/マージ アルゴリズムを実装しようとしていますが、いくつかの変更を処理する方法がわかりません。

X から A へ、および X から B への行ごとの差分があります。これらの差分は、行ごとに=、行が変更されていない+場合、行が追加された場合-行が削除されたc場合、および行が変更された場合 (単に の-直後に が続き+、行が削除されてから置き換えられ、効果的に変更されたことを示します)。

現在、A-diff と B-diff の対応するオペコードを比較して、それらをマージする方法を決定しようとしています。これらのオペコードの組み合わせのいくつかは簡単です:どちらのバージョンも行を変更していないこと=を意味するため、元のコードを保持します。とは、一方に行が追加され、他方には変更が加えられていないことを意味するため、追加を受け入れて、行を追加した側のみ次の行に進みます。とは、一方の行が変更され、もう一方の側で同じ行が削除されたため、ユーザーが解決しなければならない競合です。=+=-c

+しかし、 aと a -、または a+と aをどうするかで苦労していcます。たとえば最初のケースでは、片側に新しい行を追加し、反対側で後続の行を削除しました。厳密には、これは競合ではないと思いますが、追加がその行があることに依存しているとしたらどうでしょうか? それは全体に当てはまると思います(ある場所に追加されたものは、別の場所にあるものに依存して意味をなす場合があります)。2 番目のケースも同様で、片側に行を追加し、反対側に後続の行を変更しましたが、追加は行の元のバージョンに依存している可能性があります。

これを処理するための通常のアプローチは何ですか?

4

1 に答える 1