Подтвердить что ты не робот

Hunk # 1 FAILED at 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

Я пытаюсь перекрестно скомпилировать VLC для win32 (используя linux).

4b9b3361

Ответ 1

Это ошибка, вызванная patch. Если вы откроете файл .patch, вы увидите, что он организован в кучу сегментов, так называемых "hunks". Каждый кусок идентифицирует соответствующие фрагменты кода (по номерам строк) в старой и новой версиях, различия между этими фрагментами кода и сходства между ними ( "контекст" ).

Ловушка может потерпеть неудачу, если сходство с hunk не соответствует тому, что в исходном файле. Когда вы видите эту ошибку, это почти всегда потому, что вы используете патч для неправильной версии кода, который вы исправляете. Существует несколько способов обойти это:

  • Получить обновленную версию libdvdnav, которая уже включает патч (лучший вариант).
  • Получите файл .patch для версии libdvdnav, которую вы исправляете.
  • Патч вручную. Для каждого куска в патче попытайтесь найти соответствующий файл и строки в libdvdnav и исправьте их в соответствии с инструкциями в патче.
  • Возьмите версию libdvdnav, которая ближе к любой версии, для которой предназначен файл .patch (вероятно, плохая идея).

Ответ 2

Отладка Советы

  • Добавьте crlf в конец файла патча и проверьте, работает ли он
  • попробуйте выполнить команду -ignore-whitespace, например: [email protected]:~$ patch -Np1 --ignore-whitespace -d software-1.0 < fix-bug.patch см. учебник по markus

Ответ 3

В некоторых случаях нет разницы в версиях файлов, а только в отступах, интервалах, концах строк или номерах строк.

Для исправления, несмотря на эти различия, можно использовать следующие два аргумента:

--ignore-whitespace: Он игнорирует различия пробелов (отступы и т.д.).

--fuzz 3: опция "--fuzz X" устанавливает максимальный коэффициент размытия для линий. Эта опция применяется только к контексту и унифицированным различиям; он игнорирует до X строк, ища место для установки ломтя. Обратите внимание, что больший коэффициент нечеткости увеличивает вероятность создания неисправного патча. Коэффициент размытия по умолчанию равен 2; нет смысла устанавливать его больше, чем количество строк контекста в diff, обычно 3.

Не забудьте для пользователя "--dry-run": он попробует патч, не применяя его.

Пример:

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

Больше информации о Fuzz:

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

Ответ 4

Следуйте инструкциям здесь, это решило мою проблему.

вы должны выполнить команду, как указано ниже; patch -p0 - Dry-Run & lt; путь/к/вашим/заплатки /yourPatch.patch

Ответ 5

В моем случае патч был сгенерирован совершенно нормально IDEA, однако я отредактировал патч и сохранил его, изменив CRLF на LF, а затем патч перестал работать. Любопытно, что преобразование его обратно в CRLF не сработало. Я заметил в редакторе VI, что даже после установки формата DOS '^ M' не были добавлены в конец строк. Это заставило меня вносить изменения только в VI, чтобы сохранить EOL.

Это может относиться к вам, если вы вносите изменения в среде, отличной от Windows, в патч, охватывающий изменения между двумя версиями, обе из которых происходят из среды Windows. Вы хотите быть осторожными при редактировании таких файлов.

Кстати ignore-whitespace не помогло.

Ответ 6

Я получил сообщение "hunks failed", когда я не применял патч в верхнем каталоге связанного проекта git. Я применил патч (где я его создал) в подкаталоге.

Кажется, патчи могут быть созданы из подкаталогов в проекте git, но не применяются.