ソースツリーにパッチを適用するのに問題があり、通常の-p
ストリッピングの問題ではありません。 patch
は、パッチを適用するファイルを見つけることができます。
具体的には、私の質問は、いくつかのハンクで失敗したときにpatch
が作成する.rej
ファイルをどのように読み取って解釈するかです。私が見たpatch
/diff
のほとんどの議論には、これは含まれていません。
簡単な例:
$ echo -e "line 1\nline 2\nline 3" > a
$ sed -e 's/2/b/' <a >b
$ sed -e 's/2/c/' <a >c
$ diff a b > ab.diff
$ patch c < ab.diff
$ cat c.rej
***************
*** 2
- line 2
--- 2 -----
+ line b
ご覧のとおり、古いファイルには2行目が含まれ、新しいファイルにはshould b行目が含まれています。ただし、実際には行cが含まれています(これは拒否ファイルには表示されません)。
実際、このような問題を解決する最も簡単な方法は、.diff/.patchファイルからdiffフラグメントを取得し、パッチを適用するファイルの適切な場所に挿入してから、コードを手作業で比較して、どの行かを把握することです。実際に競合を引き起こします。
または-または-または:元のファイル(変更されていない)を取得し、パッチを適用して、ファイルに対して3方向マージを実行します。
Wiggle は、パッチが成功しなかったときに.rejファイルを適用するための優れたツールです。
私はパッチファイルの取り扱いの専門家ではありませんが、パッチファイルに含まれる情報の理解に基づいて、パッチファイルの読み方を明確にしたいと思います。
_.rej
_ファイルから次のことがわかります。
したがって、このメッセージを考えると、私の.rejファイルの冒頭に記載されています。
diff a/www/js/app.js b/www/js/app.js (rejected hunks) @@ -4,12 +4,24 @@
問題のあるファイル(_www/js/app
_)の場合、元のファイル(最初の行に_a/www/js/app.js
_と表記)と.rejファイル(_b/www/js/
_と表記)の違いがオンラインで始まることがわかります。オリジナルの4行目で12行(2行目の_@@ -4,12, +4,24 @@
_のコンマの前の部分)、新しいバージョンのファイルの4行目から始まり、24行目(後の部分) _@@ -4,12, +4,24 @@
_のコンマ。
詳細については、 http://blog.humphd.org/vocamus-)で、パッチファイルの優れた概要(上記の情報、および追加された行やファイルバージョン間の詳細を含む)を参照してください。 906 / 。
もちろん、訂正や説明は歓迎します。