診断と終了ステータス
診断メッセージは一般に、patchがパッチファイルを解析できなかったことを示します。
--verboseを指定した場合、Hmm...というメッセージは、パッチファイル内に未処理のテキストがあり、そこにパッチが含まれているか、含まれているならどの形式かをpatchが推測しようとしていることを示します。
patchの終了ステータスは、すべてのハンクを適用できた場合は0、一部のハンクを適用できなかった場合やマージの競合があった場合は1、より重大な問題があった場合は2です。一連のパッチをループで適用する際は、この終了ステータスを調べるべきです。そうすれば、適用が途中で終わったファイルに次のパッチを適用することを防げます。
注意事項
コンテキスト差分では、空ファイル、空ディレクトリ、シンボリックリンクなどの特殊ファイルの作成や削除を確実には表現できません。また、所有者、アクセス許可、あるファイルが別のファイルへのハードリンクかどうかなど、ファイルのメタデータの変更も表現できません。このような変更も必要な場合は、それを行うための別の指示(シェルスクリプトなど)をパッチに添えるべきです。
patchは、edスクリプトの行番号がずれていても判定できません。通常形式の差分でも、変更または削除が見つかったときにしか不正な行番号を検出できません。曖昧度3のコンテキスト差分でも、同じ問題が起こり得ます。このような場合は、おそらくコンテキスト差分を取り、変更が妥当かを確認するべきでしょう。もちろん、エラーなくコンパイルできることは、パッチが正しく適用された有力な目安ですが、必ずそうとは限りません。
patchは、多くの推測が必要な場合でも通常は正しい結果を出します。ただし、正しい結果が保証されるのは、パッチの生成に使ったものとまったく同じバージョンのファイルへ適用する場合だけです。