ホーム >> | UNIX >> | diff&patch |
オリジナルのファイル main.c.org と修正後のファイル main.c との差分を採ってパッチを作るとする。 diff コマンドにはいくつかオプションがあり、パッチを作るときには context 形式か unified形式を使う。
もしオプション無しで差分を採ると、差分ファイルにファイル名に関する情報が残らない。
$ diff main.c.org main.c 16,17c16,17 < printf("Patch test."); < func(&temp); --- > func(&temp); > printf("temp.a[30]= %e\n",temp.a[30]);context形式で差分を採ると、ファイル名の情報と変更部分の前後の行まで含まれる。
$ diff -c main.c.org main.c *** main.c.org Sun Feb 15 21:59:35 2004 --- main.c Sun Feb 15 22:33:00 2004 *************** *** 13,20 **** for(i=0;i<100;i++) { temp.a[i]=i; } ! printf("Patch test.\n"); ! func(&temp); return 0; } --- 13,20 ---- for(i=0;i<100;i++) { temp.a[i]=i; } ! func(&temp); ! printf("temp.a[30]= %e\n",temp.a[30]); return 0; }unified形式で差分を採ると、次のようになる。
$ diff -u main.c.org main.c --- main.c.org Sun Feb 15 21:59:35 2004 +++ main.c Sun Feb 15 22:33:00 2004 @@ -13,8 +13,8 @@ for(i=0;i<100;i++) { temp.a[i]=i; } - printf("Patch test.\n"); - func(&temp); + func(&temp); + printf("temp.a[30]= %e\n",temp.a[30]); return 0; }最後の unified形式は比較的コンパクトで且つ読みやすい形式になる。
パッチを作るには、出力をファイルに出せば良い。
$ diff -u main.c.org main.c > main.patch
この main.patch を用いて古い状態のファイル main.c にパッチを当てるには、 main.c のあるディレクトリで
$ patch < main.patchと打てば良い。 オプション -C を付けるとパッチを実行せずに動作を確認することが出来る。 パッチファイルの差分部分よりも前方に説明文などを追加することが出来る。 その先頭部分は無視して、適切に差分部分を判定してパッチを当てることが出来る。
参考: | diff/patch Tips(リンク切れ) |
UNIXの部屋(リンク切れ) |