2

ファイル MINE と YOURS が OLD の子孫であると仮定します。

FILE_MINE=

abc
デフォルト
ギ

FILE_OLD=

abc
jkl
ギ

FILE_YOURS=

abc
デフォルト
ギ

コマンドdiff3 -m MIND OLD YOURSは次のとおりです。

abc
<<<<<<< 古い
jkl
=======
デフォルト
>>>>>>>あなたのもの
ギ

diff3 は、MINE と YOURS が同一の変更を行ったことを解決できません。

なんで?そして、この問題を解決する方法はありますか?

これであなたの脳をくすぐります:

diff OLD MIND出力にdiff OLD YOURS同一のハンクがあります。

2c2
< jkl
---
>デフ

これらのハンクは、スリーウェイ マージ中に「キャンセル」されるべきではありませんか?

4

1 に答える 1

2

何を期待していましたか?

diff3 ユーティリティについて説明している記事には次のように書かれています。

... 3 つの入力ファイルがすべて異なる場合、または古いファイルのみが異なる場合、この (マージ)は正しくありませんこれを競合と呼びます。3 つの入力ファイルがすべて異なる場合、競合を重複と呼びます

したがって、あなたが説明したケースは競合として扱われます。'なんでそうなの?' あなたは尋ねるかもしれません。diff3 アルゴリズムのためです。同じページにある説明:

これ (マージ) は、あなたのものからoldを差し引いて結果をmineに追加すること、または古いものをあなたのものにする変更を私のものにマージすることと考えることができます。

変更が行われる適切なコンテキストがないため、違いを適切に解決できません。

他のアプローチを使用して機能するはずだと言うなら、私はあなたに同意します。でも・・・そういうことです。diff3 は完璧ではありません。記事で説明されているように正しく実行したい場合は、他のツールを使用することをお勧めします。

于 2011-02-16T14:42:08.527 に答える