diff3(1) 3 つのファイル間にある違いを探す

書式

diff3 [-3aeimxAETX] [-L LABEL] [--easy-only] [--ed] [--initial-tab] [--label=LABEL] [--merge] [--overlap-only] [--show-all] [--show-overlap] [--text] MINE OLDER YOUR

diff3 [-v] [--help] [--version]

説明

diff3 は 3 つのファイルを比較し、それらの違いの説明を出力する。

比較対象となるファイルは MINE, OLDER, YOURS である。これら三つのファイルのうちの一つを `-' としてもよく、その場合そのファイルは標準入力から読み込まれる。

通常 diff3 は自分の作業のために diff を起動する。しかし BDIFF 環境変数に他のプログラムを設定すれば、 そのプログラムを使うように変更できる。

オプション

-3, --easy-only
-e と似ているが、重複していない変更部分だけを出力する。
-a, --text
ファイルがテキストには見えないような場合でも、 全てのファイルをテキストとみなして 1 行ずつ比較を行う。
-e, --ed
OLDER から YOURS へのすべての変更を MINE にマージするような ed スクリプトを生成する。
-i
System V 互換性のために、 ed スクリプトの末尾に `w' コマンドと `q' コマンドを生成する。このオプションは -AeExX3 のいずれかのオプションと共に用いなければならない。また -m と同時に指定することはできない。
-m, --merge
ed スクリプトを 1 番目のファイルに適用し、その結果を標準出力に送る。 diff3 の出力を ed に送るのと異なり、 このオプションの動作はバイナリファイルや改行されていない行にも適用できる。 ed スクリプトのオプションが何も指定されなければ、 -A を暗黙のうちに指定する。
-x, --overlap-only
-e と似ているが、重複している変更だけを出力する点が異なる。
-A, --show-all
OLDER から YOURS への全ての変更を MINE にマージする。重複している変更はブラケット行で囲って出力する。
-E, --show-overlap
-e と似ているが、重複部分のブラケット行の第 1・第 3 行が異なる。 -E では重複している変更は以下のようになる。

<<<<<<< MINE
lines from MINE
=======
lines from YOURS
>>>>>>> YOURS
-L LABEL, --label=LABEL
-A, -E, -X オプションのブラケット行に、ラベル LABEL を用いる。このオプションはそれぞれの入力ファイルに対応して 3 つまで与えることができる。 デフォルトのラベルは入力ファイルのファイル名である。したがって diff3 -L X -L Y -L Z -m A B Cdiff3 -m A B C と同じように動作するが、 入力が A, B, C ではなく X, Y, Z のものであるかのような出力となる。
-T, --initial-tab
-X
-E と似ているが、重複している変更だけを出力する点が異なる。 別の言い方をすれば、 -x と似ているが、 -E のように変更をブラケット行で囲う点が異なる。
--help
標準出力に使用方法のメッセージを出力して正常終了する。
-v, --version
diff3 のバージョン番号を出力する。

出力形式

それぞれの hunk (違いを表すテキストブロック) は `====' という行から始まる。 3 ファイルとも異なる hunk では ただの `====' となり、 1 ファイルが異なっている hunk では `1', `2', `3' のいずれかが、その異なっているファイルを示すために付加される。 hunk には 2 つ、または 3 つの入力行のセットが含まれ、 それぞれに行セットがどのファイル由来のものかを示す 1 つまたは 2 つのコマンドが前置される。 デフォルトの動作では、入力行の前には 2 つのスペースが置かれ、 コマンドと区別できるようになっている。 -T が指定されると、代わりにタブを用いるので、 入力にあったタブによる桁揃えが正しく保存される。

コマンド形式

FILE:La
この hunk は FILEL 行以降に現れるべきもので、そのファイルには存在していない。 このファイルを修正して他のファイルと同じにするには、 他の行からの hunk の行を追加しなければならない。例えば `1:11a' は、その hunk はファイル 1 の 11 行目以降に追加すべきもので、 ファイル 1 には含まれていないこと示す。
FILE:Rc
この hunk には、 FILE の行範囲 R が含まれている。行範囲 R は 2 つの行番号をコンマで区切ったものである。 数字が一つだったら 1 行だけの範囲と解釈される。 このファイルを編集して他のファイルと同じにするには、 その行範囲を、他のファイルからとってきて変更しなければならない。 例えば `2:11,13c' は、この hunk は 2 番目のファイルの 11〜13 行目からとってきたものであることを示す。

入力行セットの最後の行が改行で終わっていない場合は、 出力の次の行が `\' で始まるので、改行で終わっている場合と区別できる。

返り値

diff3 は以下のどれかの値で終了する:
0
diff3 は成功し、重複している変更 (衝突) は存在しなかった。
1
重複が見付かった。
2
何らかのエラーが起こった。

注意

プログラムのバグについては [email protected] に報告してください。 ページの更新は Ragnar Hojland Espinosa <[email protected]> が行っています。