мерзавец: патч не применяется - PullRequest
218 голосов
/ 22 января 2011

У меня есть определенный патч, который называется 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

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

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

Ответы [ 8 ]

281 голосов
/ 28 января 2011

Johannes Sixt из списка рассылки msysgit@googlegroups.com предложил использовать следующие аргументы командной строки:

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

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

233 голосов
/ 13 марта 2013

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

47 голосов
/ 11 декабря 2017

Если ничего не помогает, попробуйте git apply --3way option .

git apply --3way patchFile.patch

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

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

47 голосов
/ 12 сентября 2013

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

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

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

git -am resolved
13 голосов
/ 22 января 2011

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

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

12 голосов
/ 28 марта 2018

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

patch -p1 < example.patch

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

2 голосов
/ 23 марта 2018

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

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

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

1 голос
/ 09 апреля 2018

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

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

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