複数のファイルのパッチを生成しているとき,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
その理由は,二つのファイル名のスラッシュの数が異なっていて,異なるバージョ ンの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
周りの文を使用した差分のヘッダや‘Index:’行で,正しくファイル名を指 定していることを確かめてください.既にパッチを当てたかどうか不思議に思う ので,リバースパッチを送らないように注意してください.
README.origやREADME~のようなバックアップファイル名と比較し ているパッチは,patchが本当のファイルの代わりにバックアップファ イルにパッチを当てようとして混乱するので,そのようなパッチを送ることを避 けてください.その代わりに,異なるディレクトリ,例えばold/README とnew/READMEのように,同じベースファイル名で比較したパッチを送っ てください.
以前に送られた他のパッチを実際に適用している人を保護するために,パッチファ イルの最初のパッチに,パッチレベルやバージョンナンバーが含まれている patchlevel.hやversion.cのような名前でファイルを更新させる ことが可能です.入力ファイルに間違ったバージョンナンバーが含まれている場 合,patchはすぐに文句をいいます.
この問題を避けるより明確な方法は,パッチの前に‘Prereq:’行を書くこと です.パッチファイルに前置されるテキストに‘Prereq:’で始まる行が含ま れている場合,patchはその行の次の単語(通常はバージョンナンバー) を受けとり,次の入力ファイルに空白や改行が前後にある単語が含まれているか どうか調査します.そうでない場合は,patchは処理する前に確認す るためのプロンプトを出します.これで間違った順序でパッチを偶然にも適用す ることが難しくなります.