コンテキスト不一致エラーの修正
パッチ適用に失敗した際のコンテキスト不一致エラーを診断・修正します。ファジーマッチング、オフセット調整、一般的な失敗原因を学びます。
Troubleshooting
詳細な説明
パッチ失敗時:コンテキスト不一致
パッチ適用が失敗する最も一般的な原因はコンテキスト不一致です。パッチ内のコンテキスト行が、期待される位置のファイルの実際の行と一致しません。
一般的な原因
- ファイルが変更された — パッチ作成後に他の変更で行がずれた
- 空白文字の違い — タブ vs スペース、末尾の空白、異なる改行コード
- エンコーディングの違い — ファイルが再エンコードされた(例:UTF-8 BOMの追加)
- バージョン違い — パッチが異なるバージョンに対して作成された
ファジーマッチングの仕組み
Diffパッチ適用ツールは失敗を報告する前にファジーマッチングを試みます:
期待位置:50行目
検索範囲:47-53行目(±3行)
最良の一致:52行目(すべてのコンテキスト行が一致)
結果:オフセット+2でHunkを適用
デバッグ手順
- Hunkリストで成功と失敗を確認
- コンテキスト行を比較 —
プレフィックスの行がファイルと一致するか検証 - 空白文字を確認 — Diff Viewerで空白文字を比較
- より広いコンテキストを試す — ファイルが大きく変わった場合、±3行の範囲では不十分な可能性
手動修正オプション
Hunkが失敗した場合:
- パッチを編集 — コンテキスト行を現在のファイルに合わせて更新
- 行番号を調整 —
@@ヘッダーを正しい位置に更新 - 手動で適用 — Diffプレビューを参考に手動で編集
- 再生成 — 両方のバージョンがある場合、Diff生成モードで新しいパッチを作成
ユースケース
バグレポートからパッチを適用しようとしていますが、パッチ作成後にファイルが更新されています。ファジーマッチングが小さなずれを処理し、大きくずれたHunkは手動で調整が必要です。