diffファイル(unified形式)について
ファイルを修正したときに、修正した部分(元のファイルと違う部分)だけを書く方式がある。修正前のファイルとその差分があれば、修正後の状態を作ることができる。
テスト文書を編集し、差分を取ってみる
ファイル名: test.txt.origあいうえお かきくけこ さしすせそ たちつてと なにぬねの はひふへほ まみむめも やゆよ らりるれろ わをん
これを下のように修正した場合
ファイル名: test.txt
あいうえお かきくけこ さしすせそ たちつてと なにぬねのん はひふへほ まみむめも やゆよ らりるれろ わをん がぎぐげご
端末上でdiffコマンドを-uオプション付きで実行すると
$ diff -u test.txt.orig test.txt --- test.txt.orig 2007-06-10 22:13:55.718311614 +0900 +++ test.txt 2007-06-10 22:54:23.038008776 +0900 @@ -2,9 +2,10 @@ かきくけこ さしすせそ たちつてと -なにぬねの +なにぬねのん はひふへほ まみむめも やゆよ らりるれろ わをん +がぎぐげご
上のような差分が出る。
unified形式の見方
上の例では-uというオプションを付けたが、これは人間が読みやすいunified形式で出力する指示。「+++ test.txt」という部分では、test.txtという名前のファイルに対して変更をすることを示す。
「@@」の付いている行は、テキストの違いが存在する領域(Hunk/テキストブロック)の始まりを示し、数字は修正前後のファイル内の該当する範囲を示す。Hunkが複数存在する場合は「@@」の行も同じ数だけ存在する。
-なにぬねの +なにぬねのん
この部分では、-の「なにぬねの」の行を消して、+の「なにぬねのん」をそこに挿入することを示す。
「-」「+」のいずれも含まれない行に対しては何も行わない。
作成したdiffを使って、patchコマンドから修正を行ってみるテスト
差分をファイルに書き出してから修正対象のtest.txtを修正前の状態に戻し、その後差分ファイルを利用して修正を適用してみる実験。$ diff -u test.txt.orig test.txt > test.patch $ cp test.txt.orig test.txt $ patch < test.patch patching file test.txt
これでtest.txtは修正後の状態になる。
unified以外の形式との比較
diffコマンドは、他にも幾つかの形式で差分を出力できる。色々試した結果、unified形式は、最も見やすい以外にも、他の形式と比べてみた結果、出力がコンパクトになるということも分かった。(2007/6/24)参考として、diffコマンドが出力する他の形式について、unified形式と比較してみた。