「分かりそう」で「分からない」でも「分かった」気になれるLinuxコマンド辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるLinuxコマンド辞典

diff3

スポンサーリンク

何するコマンド?

3つのファイルの中身の違いを確認するときに使うコマンド



書き方

diff3 [オプション] [ファイル名1] [ファイル名2] [ファイル名3]



オプション

オプション説明
-a指定されたファイルがテキストファイル以外の場合も中身をテキストと見なして比較する
-A[ファイル名2] から[ファイル名3]への変更内容を[ファイル名1] に取り込むときに必要な差分情報を表示するよ
-Bもう使わないよ
-e[ファイル名2] から[ファイル名3]への変更内容を[ファイル名1]に取り込むためのedスクリプトを生成するよ
-E「-e」と似た感じだけど出力結果の見た目がちょっと変わるよ(適当な意訳)
-iSystemV互換性とやらのために、edスクリプトの末尾に「w」コマンドと「q」コマンドを生成するらしい。このオプションは「-A」「-e」「-E」「-x」「-X」「-3」のいずれかのオプションと併用する必要があるらしい。ついでに「-m」とは併用しちゃ駄目らしい。「らしい」ばかりでごめんなさいね。だってイマイチよく分からないんだもん
-L【ラベル】「-A」「-E」「-X」オプションのブラケット行に【ラベル】を使うらしい
-m[ファイル名2] から[ファイル名3]への変更内容を[ファイル名1]に反映するとどうなるかを表示するよ
-Tnormal形式の場合、行頭のスペース2つをタブに置き換えるよ
-vバージョン情報を表示する
-x「-e」と似た感じだけど重複している変更部分だけを表示するよ
-X「-E」と似た感じだけど重複している変更部分だけを表示するよ
-3「-e」と似た感じだけど重複していない変更部分だけを表示するよ

補足事項

「diff3」コマンドは「diff」コマンドより、ちょっとだけ考え方がややこしいです。
ご注意ください。

「diff」コマンドは単純に2つのファイルの違いを見たいときに使うコマンドでした。
それの3つのファイル版が「diff3」……ではあるのですが「diff3」では基準となるファイルがあって、それに異なる変更を加えた2つのファイルがあるイメージです。

diff:「旧ファイル→新ファイル」の変更箇所を比較
diff3:「旧ファイル→新ファイル1、新ファイル2」の変更箇所を比較


ですね。

例えば元々のファイル「ファイルA」が ありました。
この「ファイルA」にピヨ太君が手を加えて「ファイルA2」を作りました。
この「ファイルA」にピヨ子さんが手を加えて「ファイルA3」を作りました。

この3つのファイル「ファイルA」「ファイルA2」「ファイルA3」を比較するときに使うのが「diff3」コマンドです。
基準となる「ファイルA」は2番目に指定して

diff3 「ファイルA3」 「ファイルA」 「ファイルA2」

のような書き方をします。

オプション未指定時は単純に3つのファイル「ファイルA」「ファイルA2」「ファイルA3」の違いが表示されます。

では、ここで「-e」オプションを指定して

diff3 -e 「ファイルA3」 「ファイルA」 「ファイルA2」

と書くと、どうなるでしょう。
結果は「ファイルA」から 「ファイルA2」への変更内容を「ファイルA3」に反映するために必要な情報が表示されます。
日本語にすると「ピヨ太君が加えた変更(ファイルAとファイルA2の差分)をピヨ子さんが変更したファイル(ファイルA3)に反映させるための情報」となります。
ピヨ太君の変更内容とピヨ子さんの変更内容を合体させるための情報ですね。

そして「-m」オプションは、この合体結果を表示するオプションです。
無事合体できれば合体結果の「ファイルA3」(になる予定の)中身を、合体できなければ「ここの変更箇所とここの変更箇所、どっちを残すのか分からなかった~」的に差分情報を表示してくれるのが「-m」オプションになります。

「3つのファイルを比較する」というよりは「元ファイルと2つの変更済みファイルを比較する」と表現した方が正しいのでしょうね。
例えば1つのソースファイルに2人のプログラマさんが別々に修正を入れてしまった場合などに使うコマンドなのだと思います。

……できれば活躍の場がないと嬉しいコマンドですね(-A-)

スポンサーリンク


書籍画像