11.3 よくある間違いを避ける
複数ファイルのパッチを作成するときは、名前にスラッシュを含まないディレクトリに diff を適用してください。旧ファイル名と新ファイル名でスラッシュの数が異なると -pnumber オプションが予期しない結果になることがあるため、これによってパッチ利用者がそのオプションを指定する際の混乱を減らせます。たとえば、次のようなヘッダーを持つパッチは送らないでください。
diff -Naur v2.0.29/prog/README prog/README --- v2.0.29/prog/README 2002-03-10 23:30:39.942229878 -0800 +++ prog/README 2002-03-17 20:49:32.442260588 -0800
2つのファイル名のスラッシュ数が異なり、patch のバージョンによってファイル名の解釈も異なるためです。混乱を避けるには、代わりに次のような出力を送ってください。
diff -Naur v2.0.29/prog/README v2.0.30/prog/README --- v2.0.29/prog/README 2002-03-10 23:30:39.942229878 -0800 +++ v2.0.30/prog/README 2002-03-17 20:49:32.442260588 -0800
コンテキスト diff のヘッダーか「Index:」行で、ファイル名を正しく指定していることを確認してください。逆向きのパッチは、受取人に適用済みかどうか迷わせるので、送らないよう注意します。
README.orig や README~ のようなバックアップファイル名を比較するパッチは避けてください。patch が混乱して実ファイルではなくバックアップへ適用するおそれがあります。代わりに、old/README と new/README のように、異なるディレクトリにある同じ基本ファイル名を比較するパッチを送ります。
先に適用すべき別のパッチより前にパッチが部分的に適用されるのを防ぐため、パッチファイルの最初のパッチで、パッチレベルやバージョン番号を含む patchlevel.h や version.c のような名前のファイルを更新できます。入力ファイルのバージョン番号が違っていれば、patch はすぐに問題を報告します。
この問題をより明確に防ぐ方法は、パッチの前に「Prereq:」行を置くことです。パッチファイルの先頭テキストに「Prereq:」で始まる行があると、patch はその行の次の語(通常はバージョン番号)を取り出し、次の入力ファイルに、その語が前後を空白または改行で囲まれて含まれるか確認します。含まれなければ、patch は続行前に確認を求めます。これにより、誤った順序でパッチを適用しにくくなります。