INDEX
diff と patch
diff はファイルの比較を行うためのコマンドで、2つのファイル間の違いを出力する。patch はパッチ処理を行うコマンドで、パッチファイルに従ってテキストファイルを更新する。
さらに diff コマンドの出力結果の差分ファイルは、そのまま patch コマンドのパッチファイルとなる。なので、お互いにファイルを持っていて、一方が修正を行ったときに、修正したファイルをすべて送らなくても diff コマンドで新旧の差分ファイルを作成して相手に送れば、相手は受け取ったパッチファイルと patch コマンドで修正されたファイルに更新することができる。
diff と patch の利用
たとえば、次のような2つのファイルがあったとする。
$ cat old No change line. Changed line. No change line. Deleted line. No change line. No change line. $ cat new No change line. Modified line. No change line. No change line. Added line. No change line. $
次のようにして、コンテキスト形式のdiffをとる。
$ diff -c old new
コマンドを実行すると次のような出力が得られる。
*** old 2008-12-08 12:34:56.123456789 +0900 --- new 2008-12-09 12:34:56.123456789 +0900 *************** *** 1,6 **** No change line. ! Changed line. No change line. - Deleted line. No change line. No change line. --- 1,6 ---- No change line. ! Modified line. No change line. No change line. + Added line. No change line.
次のようにして、古いファイルと差分ファイルから新しいファイルを作成することが可能となる。
$ diff -c old new > file.diff $ mv new new.org $ patch < file.diff
diff
起動
diff [オプション]... FILES
起動オプション
- -c | -e | -f | -n | -u
- 出力形式の指定。下記参照
- -r
- ディレクトリを比較したとき、再帰的にたどる。
- -i
- 大文字・小文字の違いを無視する。
- -b
- 空白・タブの数の違いを無視する。
- -B
- 空行の違いは無視する。
- -w
- 行を比較するとき、行中の余白を無視する。
ノーマル形式
$ diff old new 2c2 < Changed line. --- > Modified line. 4d3 < Deleted line. 5a5 > Added line. $
コンテキスト形式
$ diff -c old new *** old 2008-12-08 12:34:56.123456789 +0900 --- new 2008-12-09 12:34:56.123456789 +0900 *************** *** 1,6 **** No change line. ! Changed line. No change line. - Deleted line. No change line. No change line. --- 1,6 ---- No change line. ! Modified line. No change line. No change line. + Added line. No change line. $
パッチの先頭行には、ファイルのパスやタイムスタンプといった情報が書かれる。「***」が変更前で、「---」が変更後のファイル(の内容)となる。
各変更箇所の先頭には、それぞれのファイルにおける変更箇所の対応行番号が書かれる。「*** 1,6 ****」は、以下に続く内容が変更前の1行目から6行目を示し、「--- 1,6 ----」は、変更後の1行目から6行目であることを示す。
また、「+」で始まる行は、その行が追加されていることを示し、「-」で始まる行は、その行が削除されていることを示し、「!」で始まる行は、その行が変更されている行であることを示し、行頭がスペースで始まる行は、その行が変更されていないを示す。
ユニファイド形式
$ diff -u old new --- old 2008-12-08 12:34:56.123456789 +0900 +++ new 2008-12-09 12:34:56.123456789 +0900 @@ -1,6 +1,6 @@ No change line. -Changed line. +Modified line. No change line. -Deleted line. No change line. +Added line. No change line. $
patch
起動
patch [OPTION]... [ORIGFILE [PATCHFILE]]
起動オプション
Win32移植版
ソフトウェア工房α - プログラミング・ツール(移植ソフト)
http://cetus.sakura.ne.jp/softlab/toolbox1/
GNU diffutils 2.7.2 および GNU patch 2.5.4 の Win32 移植版です。
最終更新時間:2009年05月25日 21時36分26秒 指摘や意見などあればSandBoxのBBSへ。