パッチ(patch)ファイルを作りたい

» 2002年10月09日 17時36分 公開
[木田佳克ITmedia]

この記事は会員限定です。会員登録すると全てご覧いただけます。

 ソースコードのコンパイルでいろいろなソフトを利用していると、拡張子「patch」ファイルを目にすることがある。このファイルは、オリジナルファイルに、変更後差分を反映させるためのものだ。

 パッチを作成するためには、ツール(コマンド)「diff」にてcontext、またはunified形式で書き出す必要がある。通常は、unified形式が利用される場合がほとんどだ。ここでもunified形式での例を挙げよう。

 サンプルプログラムとして、Cのhello World表示プログラムを使う。オリジナルを「hallo world...」、改変後を「hello world...」の表示にしている。次がオリジナルソースファイルの例だ。

$ cat hello.c
#include
int main() {
printf("hallo world...\n");
return 0;
}

 次の例が、上記のソースのスペルミス「a」→「e」に直しているリストだ。なお、同一ファイル名で作成するため、カレントに「mkdir patch」としてパッチファイル用のディレクトリを作成し、以下のファイルを用意した。

$ cat patch/hello.c
#include
int main() {
printf("hello world...\n");
return 0;
}

 この2つのファイルを利用し、パッチファイルを作成する指定が次の通りだ。

$ diff -Naur hello.c patch/hello.c >hello.patch

 上記の指定で作成されたファイル内容は次の通りだ。行頭「+」が記述されている個所が差分であることが分かる。

$ cat hello.patch
--- hello.c Wed Oct 9 15:38:58 2002
+++ patch/hello.c Wed Oct 9 15:39:22 2002
@@ -1,6 +1,6 @@
#include
int main() {
- printf("hallo world...\n");
+ printf("hello world...\n");
return 0;
}

 このファイル行頭に、次のように黄色文字行を付け加える。

$ vi hello.patch
diff -Naur hello.c patch/hello.c
--- hello.c Wed Oct 9 15:38:58 2002
+++ patch/hello.c Wed Oct 9 15:39:22 2002
@@ -1,6 +1,6 @@
#include
int main() {
- printf("hallo world...\n");
+ printf("hello world...\n");
return 0;
}

 最後に、実際にパッチ実行が行えるかの確認だ。

$ patch -p1
patching file `hello.c'
$ cat hello.c
#include
int main() {
printf("hello world...\n");
return 0;
}

Copyright © ITmedia, Inc. All Rights Reserved.