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
это решило мою проблему.
эта команда применит патч, не разрешая его, оставляя плохие файлы как *.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