67

を実行すると次のエラーが発生しますが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を使用)。

4

8 に答える 8

82

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

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

  • すでにパッチが含まれている更新バージョンを入手してくださいlibdvdnav(最良のオプション)。
  • パッチを適用.patchしているバージョンのファイルを取得します。libdvdnav
  • 手動でパッチを適用します。パッチ内のすべてのハンクについて、の対応するファイルと行を見つけてlibdvdnav、パッチの指示に従って修正してください。
  • そのバージョンをlibdvdnav、ファイルが意図したバージョンに近いものにし.patchます(おそらく悪い考えです)。
于 2013-01-11T16:48:01.403 に答える
21

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

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

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

--fuzz 3:「-fuzzX オプションは、最大ファズ係数をラインに設定します。このオプションは、コンテキストと統一された差分にのみ適用されます。ハンクをインストールする場所を探している間、最大X行を無視します。ファズファクターが大きいほど、パッチに欠陥がある可能性が高くなることに注意してください。デフォルトのファズ係数は2です。差分内のコンテキストの行数(通常は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

于 2018-09-18T07:38:07.693 に答える
4

デバッグのヒント

  1. パッチファイルの最後にcrlfを追加し、それが機能するかどうかをテストします
  2. 次のように--ignore-whitespaceコマンドを試してください。markus によるチュートリアルをmarkus@ubuntu:~$ patch -Np1 --ignore-whitespace -d software-1.0 < fix-bug.patch 参照してください。
于 2016-06-09T15:37:00.340 に答える
0

関連するgitプロジェクトのトップディレクトリにパッチを適用していなかったときに、「hunksfailed」というメッセージが表示されました。サブディレクトリにパッチ(作成した場所)を適用していました。

パッチはgitプロジェクト内のサブディレクトリから作成できるようですが、適用できません。

于 2014-02-11T01:57:30.037 に答える
0

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

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

于 2019-04-05T11:50:36.623 に答える
0

私の場合、パッチはIDEAによって完全に正常に生成されましたが、パッチを編集して保存すると、CRLFがLFに変更され、パッチが機能しなくなりました。不思議なことに、それをCRLFに戻すことは機能しませんでした。VIエディターで、DOS形式に設定した後でも、行末に「^M」が追加されていないことに気づきました。これにより、VIでのみ変更を加える必要があり、EOLが保持されました。

これは、Windows以外の環境で、両方ともWindows環境からの2つのバージョン間の変更をカバーするパッチに変更を加える場合に当てはまる可能性があります。このようなファイルの編集方法には注意が必要です。

ところでignore-whitespace、助けにはならなかった。

于 2019-10-17T15:32:28.280 に答える
0

git diffパッチファイルを生成して出力を貼り付けていたときに、次のことが起こりました。

git diff branch-1 branch-2 # and then copy the output

これにより、空白の性質が挿入または変更されます。

代わりに、出力をファイルに転送しました。

git diff branch-1 branch-2 > my-patch.patch

これで問題が修正されました。

于 2022-03-01T11:53:40.587 に答える
-1

ハンク#1が1で失敗しました。1つのハンクのうち1つが失敗しました-拒否をファイルMakefile.am.rejに保存します

パッチを介して変更を適用し、stackoverflowで完全に検索したときに見つけたのと同じエラーですが、答えが得られませんでした。

それから私はパッチエラーの背後にある理由のような小さな部品を検索しましたそして私はそれを見つけました

ハンク#nはnnnで失敗しました。n個のハンクのうちn個が失敗しました-拒否をファイルfile.rejに保存します

これは、ハンクと呼ばれる1つ以上の変更をファイルに導入できなかったことを意味します。場合によっては、パッチが電子メールで送信されるかファイルにコピーされ、空白が追加または削除されたことが原因である可能性があります。これを回避するには、コマンドラインに--ignore-whitespaceを追加してみてください。

ステップ2

それから私はファイルの異なる終わりについて検索しました、私はfomatシステムLF、CFの2つのタイプがあることを発見しました

次に、ファイルをチェックします。

このファイルが*NIXシステムで作成された場合、次のように表示されます。

$cat-ファイルhello$

hello $しかし、このファイルがWindowsで作成された場合、次のように表示されます。

$cat-ファイルhello^M $

こんにちは^M

CRを表し、$はLFを表します。WindowsがCRLFで最後の行を保存しなかったことに注意してください

これはstackoverflowから見つけました

次に、元のファイル形式を確認し、.patch / diffで、パッチファイルにLFとCfの両方が含まれていることを確認します。

次に、これらのファイルを変換してから、WindowsまたはUNIX形式のいずれかにパッチを適用します。

dos2unixfilename.extensionまたはunix2dosfilename.extension

これはファイルを変換します

次にパッチを適用して結果を取得します

コマンドpromtコマンド

ファイルの作成 touchfilename.txt

パッチ/差分ファイルを作成するため

diff -u originalfile.txteditoredfile.txt>originalfile.diffまたはdiff-uoriginalfile.txt editoredfile.txt> originalfile.patch

変更チェックファイル形式を適用する前に

cat -A originalfile.txt
cat -A originalfile.diff

doc2unixまたはunix2dosunix2dosoriginalfile.txtunix2dosoriginalfile.diffを変換するようになりまし

変更を適用 パッチoriginalfile.txt<originalfile.diff

終わり !!

これがお役に立てば幸いです。

于 2021-03-26T19:33:02.333 に答える