У меня есть определенный патч под названием 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
Что это означает?
Как я могу решить эту проблему?
has type 100644, expected 100755
означает ли это, что где-то есть несоответствие разрешений chmod?Ответы:
git apply --reject --whitespace=fix mychanges.patch
работал на меня.объяснение
--reject
Вариант будет инструктировать мерзавец , чтобы не потерпеть неудачу , если он не может определить , как применить патч, но вместо того, чтобы применить indivdual ломтей можно применять и создавать отклонять файлы (.rej
) для скряги не может применяться. Wiggle может «применять [эти] отклоненные патчи и выполнять разносторонние сравнения».Кроме того,
--whitespace=fix
будет предупреждать об ошибках пробелов и пытаться их исправить, вместо того, чтобы отказываться от применения другого подходящего блока.Обе опции вместе делают применение исправления более устойчивым к сбоям, но требуют дополнительного внимания к результату.
Для полной документации см. Https://git-scm.com/docs/git-apply .
источник
.rej
файлы, когда не может автоматически определить, как применить исправление. Вы можете использовать покачивание, чтобы решить такие проблемы.Йоханнес Сикст из списка рассылки msysgit@googlegroups.com предложил использовать следующие аргументы командной строки:
Это решило мою проблему.
источник
-C1
переключиться для применения, это уменьшает контекст вокруг дополнений, которые рассматриваются как важные.Когда все остальное терпит неудачу, попробуйте
git apply
«s--3way
вариант .git apply --3way patchFile.patch
Типичный случай сбоя применяет как можно большую часть патча и оставляет вам конфликты для работы в git, как вы обычно это делаете. Вероятно, на один шаг легче, чем
reject
альтернатива.источник
--3way
должно быть поведение по умолчанию. Когда исправление не удается, по крайней мере, скажите мне, что не удалось, чтобы я мог исправить это вручную.git apply
просто терпит неудачу и не сообщает, почему что-то терпит неудачу. Я даже не мог найти*.rej
файлы, подобные тем, которыеhg
генерирует.Эта команда будет применять патч, не устраняя его, оставляя плохие файлы как
*.rej
:Вы просто должны решить их. После разрешения выполните:
источник
*.rej
- все, что я могу найти, - это внести изменения вручную в исходный файл и удалить эти.rej
файлы. Любым другим путем ?wiggle --replace path/to/file path/to/file.rej
. Эта команда будет применять изменения из.rej
файла в исходный файл. Также он создает копию оригинального файла, какpath/to/file.porig
. Пожалуйста, ознакомьтесь с документацией для получения дополнительной информации оПопробуйте использовать решение, предлагаемое здесь: https://www.drupal.org/node/1129120
patch -p1 < example.patch
Это помогло мне.
источник
git: 'patch' is not a git command.
наgit version 2.21.1 (Apple Git-122.3)
Это происходит, когда вы смешиваете git-клиенты UNIX и Windows, потому что в действительности 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 (перенаправлена в копию archive.org от 3 декабря 2013 г.)
источник
git reset --hard HEAD
заставить git повторно извлекать ваши файлы с новой действующей опцией.В моем случае я был достаточно глуп, чтобы сначала создать файл патча некорректно, на самом деле неправильно . Я получил те же сообщения об ошибках.
Если вы мастер и делаете
git diff branch-name > branch-name.patch
, это попытается удалить все добавления, которые вы хотите выполнить, и наоборот (что было невозможно для git, поскольку, очевидно, никогда не выполненные добавления не могут быть удалены).Поэтому убедитесь, что вы зашли в свою ветку и выполните
git diff master > branch-name.patch
источник
ВНИМАНИЕ: Эта команда может удалить старые потерянные коммиты ПОСТОЯННО. Сделайте копию всего своего хранилища, прежде чем пытаться это сделать.
Я нашел эту ссылку
Я понятия не имею, почему это работает, но я пробовал много обходных путей, и это единственный, который работал для меня. Короче говоря, выполните три команды ниже:
источник
То, что я искал, точно не указано здесь, в SO, я пишу для пользы других, которые могут искать подобное. Я столкнулся с проблемой удаления одного файла (присутствующего в старом репо) в репо. И когда я применяю патч, он терпит неудачу, так как не может найти файл для применения. (так что мой случай - git patch не удалась, когда файл был удален) '#git apply --reject' определенно дал представление, но не совсем помогло мне исправить. Я не мог использовать покачивание, поскольку оно недоступно для наших серверов сборки. В моем случае я справился с этой проблемой, удалив запись «файл, который был удален в репо» из файла исправления, который я пытался применить, поэтому все остальные изменения были применены без проблем (с использованием трехстороннего слияния, избегая ошибки пробела), а затем вручную объединить содержимое файла, удаленного туда, куда его переместили.
источник
Моя проблема в том, что я побежал
git diff
, затем побежалgit reset --hard HEAD
, затем понял, что хотел отменить, поэтому я попытался скопировать вывод изgit diff
в файл и использоватьgit apply
, но я получил ошибку, что «патч не применяется». После переключенияpatch
и пытается использовать его, я понял , что кусок в дифф был повторен по какой - то причине, и после удаления дубликатов ,patch
(и , предположительно , такжеgit apply
) работал.источник