diffと差分パッチ
diff
コマンドは差分を検出するコマンドです.
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 自分のファイル 作業前のファイル 他者が変更した後のファイル |