Next: Dry Runs, Previous: Reversed Patches, Up: Imperfect
周りの文を使用した差分と,より少ない範囲の通常の差分に対して,パッチが記 述している行番号が正しくないときは,patchは正しいものを検出す ることが可能で,パッチのhunkを適用する正しい場所を見つけようとします.最 初に見つかると,hunkで記述されている行番号に,以前にhunkに適用したオフセッ トを加えたり引いたりします.それが正しい場所ではない場合,hunkで与えられ る周りの文に一致する行の前後をpatchはスキャンします.
最初にpatchは周りの文のすべての行がマッチする場所を探します. そのような場所を見つけることができず,周りの文を使用している差分や一体化 した差分を読み込んでいて,最大のfuzzの要素が1以上に設定されている場合, 周りの文の最初と最後の行を無視しながら,patchはもう一度スキャ ンします.それでも失敗し,最大のfuzzの要素が2以上に設定されている場合, 周りの文の最初の二行と最後の二行を無視しながらもう一度スキャンします.最 大のfuzzの要素がそれより大きい場合は,同様に続けていきます.
-F linesや--fuzz=linesオプションで,最大の fuzzの要素をlinesに設定します.このオプションは,周りの文を使用し ている差分や一体化した差分だけに適用されます.hunkを導入する場所を探して いる間,lines行まで無視します.より大きなfuzzの要素で,不完全なパッ チを作成する可能性が高くなることに注意してください.デフォルトのfuzzの値 は2です.周りの文を使用した差分の行数,通常は三行,以上に設定しても意味 はありません.
patchがパッチのhunkを導入する場所を見つけることができない場合, hunkをリジェクトファイルに書き出します(リジェクトファイルの命名方法は, see Reject Names).入力されるパッチの形式のまま,リジェクトされた周 りの文を用いた書式のhunkを書き出しても問題ありません.入力が通常または edの差分の場合,周りの文の多くは単にヌルになります.リジェクト ファイルのhunkの行数は,これらのパッチファイルとは異なります. patchが失敗したファイルが属する適切な場所を,古いファイルでは なく新しいファイルで示しています.
--verboseオプションが与えられている場合,それぞれのhunkが完了す るとき,patchはhunkが成功したか失敗したかを告げ,失敗した場合, hunkを適用すべき行だとpatchが考える(新しいファイルの)行を報告 します.これが差分で指定されている行番号と異なる場合,そのオフセットを報 告します.単一の大きなオフセットは,patchがhunkを間違った場所 に導入していることを示している可能性があります.疑わしい場合も, patchは,マッチするようにfuzz要素を使用したかどうかを報告しま す.
patchは,行番号がedスクリプトでoffになっているかどう かを報告することはできませんが,変更や削除コマンドになっている通常の差分 での間違った行番号を検出することだけは可能です.差分に表示されている周り の文の行数(通常は3)以上のfuzz 要素を使用しているときの,周りの文を使用し た差分でも同じ問題があるかもしれません.この状況では,オリジナルとパッチ をあてる入力の間を変更することに意味があるかどうかを知るために,周りの文 を使用した差分を見るべきでしょう.エラー無く組み込まれると,パッチが動作 したことを見事に示していますが,保証はしていません.
空のファイルへのパッチは,存在しないファイルに適用され,その逆も真です. See Creating and Removing.
patchは通常,たくさん推測する必要があっても,正しい結果を生成 します.しかし,結果はパッチが生成されたファイルのコピーに正確に適用され るときだけ保証されます.