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

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

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

$ 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 ответов


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

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

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


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


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

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

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

git -am resolved

когда все остальное не удается, попробуйте git apply ' s --3way опции.

git apply --3way patchFile.patch

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

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


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

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


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

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

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


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

patch -p1 < example.patch

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


Я нашел этой ссылке

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

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