Copyright (c) 2001 Koichi OKADA
まず「取扱説明書」をお読みください。
diff というのはファイルの差分を作成するツール、 patch というのはファイルの差分からファイルの変更を再現するツールです。 通常 diff で作った差分ファイルをパッチ(ばんそうこう)と呼びます。
多分、気にしなくて良いです。
通常 UNIX には diff と patch は標準で入っています。 特に準備はいらないはずです。
一番手っ取り早いのはcygwinを入れることです。
cygwin はでか過ぎるとか cygwin はちょっとって言う人は vector辺りで win32 native な rcs/diff と patch を 取って来るというのも手です。
分かりません:-P。 Mac OS X を使いましょう(Mac OS X は UNIX です)。
パッチは diff を用いることで作成できます。 この際 -c オプションを付けるほうが良いようです。 -c オプションを付けると変更部分の前後関係も記録する context 形式の差分が作成されるため より正確にパッチを適用できます。
1ファイル毎にパッチを作成するには以下のようにします。 FROM_FILE の所に変更前のファイル名、 TO_FILE の所に変更済みのファイル名、 PATCH_FILE の所に作成するパッチのファイル名を書きます。
diff -c FROM_FILE TO_FILE > PATCH_FILE
ディレクトリの中にある複数のファイルに対して 一度にパッチを作成するには以下のようにします。 FROM_DIRECTORY の所に変更前のファイルが入っているディレクトリ名、 TO_DIRECTORY の所に変更済みのファイルが入っているディレクトリ名、 PATCH_FILE の所に作成するパッチのファイル名を書きます。
diff -c FROM_DIRECTORY TO_DORECTORY > PATCH_FILE
ディレクトリ以下のファイル全てについてパッチを作成する場合は以下のようにします。
diff -cr FROM_DIRECTORY TO_DORECTORY > PATCH_FILE
-r オプションを加えるとディレクトリ以下を階層的に検索してくれます。
上記の方法では一方にしか存在しない、つまり追加または削除されたファイルは 記録されません。 追加または削除されたファイルも記録するためには以下のようにします。
diff -crN FROM_DIRECTORY TO_DORECTORY > PATCH_FILE
-N オプションは、 ディレクトリを比較する際、片方のディレクトリにのみファイルが存在していたら もう片方のディレクトリには同名の空っぽのファイルがあるように動作します。
パッチは patch を用いることで適用できます。
適用したいファイルの存在するディレクトリ上で以下のようにします。 変更前のファイルはファイル名末尾に .org が付加されて保存されます。
patch < PATCH_FILE
パッチを作成したときと相対的に同じディレクトリにて以下のようにします。
patch -p0 -d . < PATCH_FILE
-p オプションは差分作成時の相対ディレクトリを有効にします (-p がないと全てのファイルがカレントディレクトリにあると仮定されます)。 -p の後ろの 0 は 差分ファイルに記録されている相対ディレクトリを全て有効にするという意味です。 1、2 と増えていくと、記録された相対ディレクトリが頭から1つづつ削られます (例 : -p1 だと usr/local/src → local/src、-p2 だと usr/local/src → src)。
-d オプションはパッチを適用するディレクトリを指定します (カレントディレクトリに適用するなら無くても良いです)。
上記の方法では、ファイルの追加はされても削除が行われません。 ファイルの削除も再現するには以下のようにします。
patch -p -d . -E < PATCH_FILE
-E オプションはパッチ適用後、空のファイルは削除するようにします。
ご意見・ご感想は こちらのアドレス までお願いします。