このページの内容

8.2 競合を示す

diff3 は、特別なマーカー行で囲むことで、マージ済み出力の競合を示せます。2つのファイル A と B から生じる競合は、次のように示されます。

<<<<<<< A
lines from A
=======
lines from B
>>>>>>> B

3つのファイル A、B、C から生じる競合は、次のように示されます。

<<<<<<< A
lines from A
||||||| B
lines from B
=======
lines from C
>>>>>>> C

--show-all(-A)オプションは -e オプションと同様に動作しますが、競合を囲み、未マージの変更だけでなく older から yours への変更をすべて出力する点が異なります。そのため、入力例ファイル(3つ目の入力例ファイル を参照)に対して「diff3 -A lao tzu tao」を実行すると、tzu だけが異なる競合を囲みます。

<<<<<<< tzu
=======
The Way that can be told of is not the eternal Way;
The name that can be named is not the eternal name.
>>>>>>> tao

また、3方向の競合は次のように出力します。

<<<<<<< lao
||||||| tzu
They both may be called deep and profound.
Deeper and more profound,
The door of all subtleties!
=======

  -- The Way of Lao-Tzu, tr. Wing-tsit Chan
>>>>>>> tao

--show-overlap(-E)オプションは、未マージの変更だけを出力し、2番目のファイルの内容を出力しないため、--show-all(-A)オプションより情報が少なくなります。つまり -E オプションは -e オプションと同様に動作しますが、3方向の重複する変更について1番目と3番目のファイルを囲む点が異なります。同様に、-X は -x と同様に動作しますが、その変更(必ず重複する変更)のすべてを囲みます。たとえば上記の3方向の重複する変更では、-E と -X オプションは次のように出力します。

<<<<<<< lao
=======

  -- The Way of Lao-Tzu, tr. Wing-tsit Chan
>>>>>>> tao

意味のない名前や情報の乏しい名前のファイルを比較する場合、--label=label オプションで「<<<<<<<」「|||||||」「>>>>>>>」の囲み内に別の名前を表示できます。このオプションは、入力ファイルごとに1回、最大3回指定できます。したがって「diff3 -A --label X --label Y --label Z A B C」は「diff3 -A A B C」と同様に動作しますが、出力は「A」「B」「C」ではなく「X」「Y」「Z」という名前のファイルから得たように見えます。