web-dev-qa-db-ja.com

Hunk#1は1で失敗しました。それはどういう意味ですか?

makeを実行すると次のエラーが表示されますが、それが何を意味するのか、どうすればよいのかわかりません。誰もが私を照らしたり、正しい方向に私を向けることができますか?

(cd libdvdnav-git && patch -p1) < ../../contrib/src/dvdnav/dvdnav.patch
patching file Makefile.am
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file Makefile.am.rej
make: *** [dvdnav] Error 1

Win32用にVLCをクロスコンパイルしようとしています(Linuxを使用)。

54
JellicleCat

patchによって生成されたエラーです。 .patchファイルを開くと、「ハンク」と呼ばれる一連のセグメントで構成されていることがわかります。すべてのハンクは、古いバージョンと新しいバージョンの対応するコード(行番号)、それらのコードの違い、およびそれらの間の類似性(「コンテキスト」)を識別します。

ハンクの類似性が元のファイルの内容と一致しない場合、ハンクは失敗する可能性があります。このエラーが表示される場合、ほとんどの場合、パッチを適用しているコードのバージョンが間違っているためにパッチを使用しているためです。これを回避するにはいくつかの方法があります。

  • 既にパッチが含まれているlibdvdnavの更新バージョンを取得します(最適なオプション)。
  • パッチを適用するlibdvdnavのバージョンの.patchファイルを取得します。
  • 手動でパッチを適用します。パッチ内のすべてのハンクに対して、libdvdnav内の対応するファイルと行を見つけ、パッチの指示に従って修正してください。
  • .patchファイルが意図したバージョンに近いlibdvdnavのバージョンを使用します(おそらく悪い考えです)。
62
user824425

デバッグのヒント

  1. Crlfをパッチファイルの最後に追加し、動作するかどうかをテストします
  2. 次のような--ignore-whitespaceコマンドを試してください:markus@ubuntu:~$ patch -Np1 --ignore-whitespace -d software-1.0 < fix-bug.patch参照 markusによるチュートリアル
4
Ema

場合によっては、ファイルバージョンに違いはありませんが、インデント、スペース、行末または行番号にのみあります。

これらの違いにもかかわらずパッチを適用するには、次の2つの引数を使用することができます:

-ignore-whitespace:空白の違い(インデントなど)を無視します。

-fuzz 3:the "--fuzz[〜#〜] x [〜#〜] "オプションは、最大ファズ係数をラインに設定します。このオプションは、コンテキストおよび統合差分にのみ適用されます。ハンクをインストールする場所を探している間、[〜#〜] x [〜#〜]行まで無視します。ファズファクターを大きくすると、パッチの不具合が発生する可能性が高くなります。デフォルトのファズ係数は2です。 diffのコンテキストの行数(通常は3行)以上に設定しても意味がありません。

ユーザー "--dry-run"を忘れないでください:パッチを適用せずに試してみます。

例:

patch --verbose --dry-run --ignore-whitespace --fuzz 3 < /path/to/patch.patch

ファズに関する詳細情報:

https://www.gnu.org/software/diffutils/manual/html_node/Inexact.html

1
André DS

指示に従ってください ここ 、それは私の問題を解決しました。

次のようにコマンドを実行する必要があります。 patch -p0 --dry-run <path/to/your/patchFile/yourPatch.patch

0
Jehangir Wahid