2017-02-22 5 views
6

Я пытаюсь применить патч, который включает двоичные файлы с git apply, но добавляются только файлы. Я попробовал запустить git apply failing.patch -v и печатает что-то вроде:Git apply skips patches

Пропущен патч 'file.txt'.
Проверка патча file.bin ...
Прикладной файл patch.bin.

Как я могу узнать, в чем причина пропусков? Поскольку текущее сообщение не очень полезно.

+0

Патч обычно пропускается, когда внесенные изменения уже применяются в прошлом. Для этого существует множество возможных причин: слияние, выбор вишни, изменение осуществляется вручную или с использованием другого патча и т. Д. – axiac

+0

Я тоже об этом думал, но это было не так. –

ответ

7

я узнал эту проблему, запустив patch -p1 < failing.patch который печатал

не может найти файл патча на входе линии 5

, который напомнил мне, что я был не в корневом каталоге.

Я не могу понять, почему no one had asked this before и почему это подробное сообщение не является подробным.

Кроме того, даже official documentation не упоминает пропуски и возможные причины.

1

Страдает этой проблемой, пытаясь изменить порт в проектах. git apply, похоже, игнорирует любые имена каталогов на пути к файлам исправлений, также отказывается применять, если строка индекса не соответствует хешу файла в целевом репозитории. Я имел лучший успех, используя эти варианты (из которых --no-index кажется, незарегистрированными):

git apply --verbose --no-index --directory {subdir} {patch-file} 
0

получил тот же самый вопрос. В моем случае источником ошибки была папка .git в некоторых родительских каталогах цели патча. Решение заключалось в том, чтобы перемещать цель патча вне этого родительского каталога.