web-dev-qa-db-ja.com

.rejファイルの読み方、つまり

ソースツリーにパッチを適用するのに問題があり、通常の-pストリッピングの問題ではありません。 patchは、パッチを適用するファイルを見つけることができます。

具体的には、私の質問は、いくつかのハンクで失敗したときにpatchが作成する.rejファイルをどのように読み取って解釈するかです。私が見たpatch/diffのほとんどの議論には、これは含まれていません。

25
Rudy

簡単な例:

$ 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方向マージを実行します。

19
Bodo Thiesen

Wiggle は、パッチが成功しなかったときに.rejファイルを適用するための優れたツールです。

10
zr.

私はパッチファイルの取り扱いの専門家ではありませんが、パッチファイルに含まれる情報の理解に基づいて、パッチファイルの読み方を明確にしたいと思います。

_.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 /

もちろん、訂正や説明は歓迎します。

5
Mugshep