diffコマンドは差分を検出するコマンドです.
2つのファイルを引数にとり,それらの内容を比較します.

目次

  1. 基本的な使い方
  2. 若干の差異の許容
  3. パッチファイルの作成と適用
  4. フォルダの比較
  5. 2人で同じファイルを変更してしまった

基本的な使い方

diffコマンドは次の形で使用します.

diff 旧ファイル 新ファイル

2つのファイルがテキストファイルであれば,拡張子が異なっても構いません.

デフォルトでは変更箇所が書き出されます.
同一であるかだけを知りたい場合は,sオプションを使います.
反対に,異なるかどうかだけを知りたい場合は,qオプションです.

若干の差異の許容

若干の差異を無視するオプションも用意されています.
iオプションは大文字・小文字の違いを無視します.
wオプションはスペースとタブ(ホワイトスペース)の違いを無視します.
Bオプションは空白行(ブランクライン)の違いを無視します.
正規表現で差異を無視するオプションも存在します.

パッチファイルの作成と適用

uオプションでunified context形式によるパッチファイルが生成されます.
unified context形式は追加行と削除行が読みやすいため,広く用いられている表示形式です.

diff -u 旧ファイル 新ファイル > example.patch

パッチファイルを旧ファイルに適用することで,新ファイルへ更新します.
コマンドはpatchです.

patch 旧ファイル < example.patch

パッチファイルには旧ファイル名が記述されているので,旧ファイル名を省略した場合はカレントディレクトリから旧ファイルを探してきます.

万一誤ったパッチを当ててしまったとしたら,Rオプションにより,

patch -R 旧ファイル < example.patch

とすることで,元に戻すことができます.

フォルダの比較

diffコマンドがフォルダに使われた場合,フォルダに含まれるファイルの構成を比較します.
フォルダ1とフォルダ2の構成はrオプションにより再帰的に比較するなら,

diff -r フォルダ1 フォルダ2

とします.
もし特定の拡張子を除いて2つのフォルダを再帰的に比較したいなら,

diff -r -x="*.拡張子" フォルダ1 フォルダ2

とします.

2人で同じファイルを変更してしまった

diffコマンドのバリエーションとして,3つのファイルを比較するdiff3コマンドが存在します.
diff3コマンドは次のように使います.

diff3 自分のファイル 作業前のファイル 他者が変更した後のファイル

特に,eオプション(作業前ファイル→他者変更後ファイルのパッチ作成)とmオプション(自分のファイルへパッチ適用)を指定することで,自分のファイルに他者の変更を反映して最新の状態へ更新することができます.

diff3 -em 自分のファイル 作業前のファイル 他者が変更した後のファイル