パッチは、元のバージョンのソース コード ファイル (rev1 と呼びましょう) を取得し、それに変更を加え (したがって rev2 になります)、diff を使用して行われます。
パッチは rev1 に問題なく適用されます。
ただし、同じパッチが同じファイルの他の変更されたバージョンに完全に適用される場合があります (ただし、常にではありません)。正確にはいつこれが起こりますか?
これが発生する正確な条件は、使用しているパッチ アプリケーション プログラムによって異なります。ただし、ほとんどのパッチ プログラムにはヒューリスティック アルゴリズムがあり、パッチの作成に最初に使用されたベース ファイルとは特定の方法で異なるベース ファイルを使用できます。
最も有用なパッチ形式には、変更された行の周りに変更されていない「コンテキスト」行が数行含まれています。パッチ プログラムは、パッチ ファイルの行番号情報 (異なる場合があります) をコンテキスト行と組み合わせて使用して、変更を適用する適切な場所が新しいベース ファイルのどこにあるかを見つけます。通常、行番号は多少異なることは許されますが、コンテキスト行は正確に一致する必要があります。
コンテキスト行が異なっていて、パッチ プログラムが変更箇所を見つけられない場合、競合が発生します (「拒否されたハンク」出力が生成される可能性があります)。