diffとpatch

これは便利いいなー。今時はcvsというツールもあるが、そっちの方はまだよく使い方が判ってないので暫くはdiffで。

まず、hello.cの中のprintf文で表示するテキストの内容を変えてみる。差分を取るためには2つファイルが必要になるのでhello.cとコピーした後編集したファイルのhello2.cを作成。

# cp hello.c hello2.c
# vi hello2.c

次にdiffコマンドを使い差分をとる、因みにオプション無しの場合はファイル情報が出力されなかったのでpatchの当て方が判らなかったので-cか-uを使用する。両者の違いは次の通り。

# diff -u hello.c hello2.c
— hello.c Fri Dec 23 17:56:29 2005
+++ hello2.c Fri Dec 23 17:58:05 2005
@@ -2,7 +2,7 @@

int main()
{
– printf(“Hello, world!n”);
+ printf(“ハローワールド!n”);
return 0;
}

# diff -c hello.c hello2.c
*** hello.c Fri Dec 23 17:56:29 2005
— hello2.c Fri Dec 23 17:58:05 2005
***************
*** 2,8 ****

int main()
{
! printf(“Hello, world!n”);
return 0;
}

— 2,8 —-

int main()
{
! printf(“ハローワールド!n”);
return 0;
}

-cだと2つのソース全てを書き出してかなり冗長している。これなら-uでいいかな。通常はこれを差分ファイルとして保存するのでコマンドは『diff -c hello.c hello2.c > hello.diff』の様にする。

そして、実際にhello.cをhello2.cの状態にするには、
# patch < hello.c
でOK。もう一度同じコマンドを使用すると確認を要求されるがpacheを当てる前に戻してくれる。