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

Git: патч не применяется

У меня есть определенный патч с именем my_pcc_branch.patch.

Когда я пытаюсь применить его, я получаю следующее сообщение:

$ git apply --check my_pcc_branch.patch
warning: src/main/java/.../AbstractedPanel.java has type 100644, expected 100755
error: patch failed: src/main/java/.../AbstractedPanel.java:13
error: src/main/java/.../AbstractedPanel.java: patch does not apply

Что это значит?

Как я могу исправить эту проблему?

4b9b3361

Ответ 1

Johannes Sixt из списка рассылки [email protected], предлагаемого с использованием следующих аргументов командной строки:

git apply --ignore-space-change --ignore-whitespace mychanges.patch

Это решило мою проблему.

Ответ 2

git apply --reject --whitespace=fix mychanges.patch работал у меня.

Ответ 3

Эта команда применит исправление, не разрешая его, оставляя плохие файлы как *.rej:

git apply --reject --whitespace=fix mypath.patch

Вам просто нужно их разрешить. После разрешенного запуска:

git -am resolved

Ответ 4

Когда все остальное не работает, попробуйте git apply --3way.

git apply --3way patchFile.patch

--3way
Когда патч не применяется чистым образом, вернитесь к трехстороннему слиянию, если патч записывает личность blob, к которому он должен применяться, и мы имеем эти blob файлы, доступные локально, возможно, оставляя маркеры конфликтов в файлах рабочего дерева для пользователя. Этот параметр подразумевает опцию --index и несовместим с параметрами --reject и --cached.

Типичный случай сбоя применяет как можно больше патча, и он оставляет вам конфликты, чтобы работать в git, но вы обычно это делаете. Вероятно, один шаг легче, чем reject альтернативы.

Ответ 5

Это происходит, когда вы смешиваете клиенты UNIX и Windows git, потому что Windows на самом деле не имеет понятия "x", поэтому ваша проверка файла rw-r--r-- (0644) под Windows "продвигается" с помощью msys POSIX - rwx-r-xr-x (0755). git считает, что разность режимов будет в основном такой же, как текстовая разница в файле, поэтому ваш патч не применяется напрямую. Я считаю, что ваш единственный хороший вариант - установить core.filemode на false (используя git-config).

Здесь проблема msysgit с некоторой связанной информацией: http://code.google.com/p/msysgit/issues/detail?id=164 (перенаправляется на архив .org 3 декабря 2013 г.)

Ответ 6

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

Если вы находитесь на хозяине и делаете git diff branch-name > branch-name.patch, это пытается удалить все дополнения, которые вы хотите выполнить, и наоборот (что невозможно было выполнить git, поскольку, очевидно, никогда не выполнялись дополнения, не может быть удалены).

Поэтому убедитесь, что вы проверяете свою ветку и выполняете git diff master > branch-name.patch

Ответ 7

Попробуйте использовать предлагаемое здесь решение: https://www.drupal.org/node/1129120

patch -p1 < example.patch

Это помогло мне.

Ответ 8

Я нашел эту ссылку

Я понятия не имею, почему это работает, но я пробовал много работы, и это единственный, который работал на меня. Короче говоря, запустите следующие три команды:

git fsck --full
git reflog expire --expire=now --all
git gc --prune=now