29

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

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

4

3 に答える 3

19

簡単な例:

$ 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 が含まれており、新しいファイルには行 b が含まれている必要があります。ただし、実際には行 c が含まれています (拒否ファイルには表示されません)。

実際、このような問題を解決する最も簡単な方法は、.diff/.patch ファイルから diff フラグメントを取得し、パッチを適用するファイルの適切な場所に挿入し、コードを手で比較して、どの行が実際に紛争を引き起こします。

または - 別の方法: 元のファイル (変更されていない) を取得し、パッチを適用して、ファイルに対して 3 方向のマージを実行します。

于 2009-02-12T20:16:50.427 に答える
11

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

于 2012-02-19T16:41:36.477 に答える
7

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

ファイルから次の.rejことがわかります。

  • 元のファイルと .rej ファイルの違い。
  • 問題のコードが元のファイルで始まる場所、そのファイルで何行続くか。
  • 新しいファイルでコードが開始する場所と、そのファイルで何行続くか。

したがって、このメッセージが与えられた場合、.rej ファイルの冒頭に次のように記載されています。

diff a/www/js/app.js b/www/js/app.js (rejected hunks) @@ -4,12 +4,24 @@

私の問題ファイル ( ) では、元のファイル (最初の行にあると記されている) と .rej ファイル ( と示されている)www/js/appの違いは、元のファイルの 4 行目から始まり、12 行 ( 2 行目のコンマ)、新しいバージョンのファイルの 4 行目から始まり、24 行続きます ( .a/www/js/app.jsb/www/js/@@ -4,12, +4,24 @@@@ -4,12, +4,24 @@

詳細については、http://blog.humphd.org/vocamus-906/にあるパッチ ファイルの優れた概要 (上記の情報と、追加された行および/またはファイル バージョン間の詳細を含む) を参照してください。

もちろん、修正や説明は大歓迎です。

于 2015-12-16T07:45:22.373 に答える