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

Ошибка при применении патча в git

У меня есть мелкий клон, на котором я сделал три фиксации. Вот журнал:

$git log --online --graph --decorate --all
* d3456fd (HEAD, мастер) патч 3
* 9713822 патч 2
* 6f380a6 патч 1
* 8a1ce1e (происхождение/мастер, происхождение /HEAD ) из полного клона
* 7c13416 добавлен из неглубоких * 3b3ed39 удален адрес электронной почты
* cfbed6c дальнейшие изменения
* a71254b добавлен для релиза 2.1
* 7347896 (привитые) изменения для релиза 2

теперь я создаю патч отсюда:

$git format-patch -k --stdout origin > ../format_since_origin.patch

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

$git log --online --graph --decorate --all
* 8a1ce1e (HEAD, начало/мастер, мастер) из полного клона
* 7c13416 добавлен из неглубоких * 3b3ed39 удален адрес электронной почты
* cfbed6c дальнейшие изменения
* a71254b добавлен для релиза 2.1
* 7347896 изменений для релиза 2
* b1a8797 изменяет файлы ttwo
* 603710c изменил протокол испытаний
* 16b20b3 добавлен test_report.txt
* f0871ea модифицированный файл1.xml
* dd94bfc добавил file1.xml
* 00758aa second commit
* 49f9968 first commit

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

$git am -3/c/temp/ git/format_since_origin.patch
Применение: patch 1
Использование индексной информации для восстановления базового дерева...
Ошибка: исправлена ​​ошибка: file1.c: 6
error: file1.c: патч не применяется
Вы отредактировали свой патч?
Это не относится к блобам, записанным в его индексе.
Невозможно вернуться к трехстороннему слиянию.
Патч завершился неудачей при патче 0001 1
Когда вы решите эту проблему, запустите "git am --resolved".
Если вы предпочтете пропустить этот патч, вместо этого запустите "git am --skip".
Чтобы восстановить исходную ветвь и остановить выполнение патча "git am --bort".

Любая идея, почему этот патч не работает? Или мой метод совершенно не прав?

Update:

Он работает со следующим

$git am -3 --ignore-whitespace/c/temp/ git/format_since_origin.patch Применение: патч 1 Применение: patch 2 Применение: patch 3

Теперь, как предложил Чарльз - если я попробую diff git, я получу ошибку, как показано ниже.

$git diff -p origin > ../dif_origin.patch

При применении,

$git применить --ignore-whitespace --inaccurate-eof/c/temp/ git/dif_origin.patch
c:/temp/git/dif_origin.patch:9: конечные пробелы.
изменение патча для file1.c
c:/temp/git/dif_origin.patch:18: конечные пробелы.
патч этого парня xml
c:/temp/git/dif_origin.patch:29: завершение пробелов.
fsdfsd
c:/temp/git/dif_origin.patch.30: завершение пробела.
исправить этот отчет
Ошибка: исправлена ​​ошибка: file1.c: 6
error: file1.c: патч не применяется
Ошибка: исправлена ​​ошибка: file1.xml: 2
error: file1.xml: патч не применяется
Ошибка: исправлена ​​ошибка: tr/test_report.txt: 2
error: tr/test_report.txt: патч не применяется

4b9b3361

Ответ 1

Обратите внимание, что одним из оснований для игнорирования пробелов было (June 2010):

Что он делает, это включить GMail -> download -> git-am workflow.
GMail (и, несомненно, бесчисленное множество других). Поставщики электронной почты вводят пробелы в начале сырых сообщений электронной почты, в то же время оставляя их неповрежденными.

Как указано в разделе git am/format-patch: формат управления концами строк", вы можете попробовать:

 git am --keep-cr

Это не требует, чтобы вы игнорировали пробелы (только предупреждение).

OP maxmelbin подтверждает в комментариях, что работает следующее:

 git am -3 --keep-cr --committer-date-is-author-date /c/temp/git/format_since_origin.patch

Ответ 2

Когда приложение git работает нормально, вы не получаете никакого вывода:

$ git apply example.patch
[nothing returned]

Если вы хотите посмотреть, что происходит за кулисами, вы можете использовать флаг -v (verbose):

$ git apply -v example.patch
Checking patch includes/common.inc...
Applied patch includes/common.inc cleanly.

Однако, если запуск git применяется в вашей локальной локальной рабочей папке git, возможно, что даже при значении -v (verbose), git apply ничего не сделает и не даст результата. Если это произойдет, проверьте свое местоположение в дереве каталогов - git apply может работать из другого места.

Альтернативой git применяется использование команды patch:

$ patch -p1 < example.patch

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

$ git apply example.patch
error: patch failed: includes/common.inc:626
error: includes/common.inc: patch does not apply``

Git не удалось применить изменения в патче, потому что он не смог найти строку (строки) рассматриваемого кода; они должны быть изменены или удалены другой фиксацией. Попробуйте следующее:

Убедитесь, что патч еще не был применен. Найдите его в git -log или просто просмотрите код, чтобы узнать, имеются ли изменения (-и). Если да, то все готово. Если они не являются или только некоторые из них, попробуйте что-то еще:

Используйте patch -p1 < filename.patch. В то время как git -приложение вообще отвергает патч с любыми ошибками, patch -p1 работает с hunk с помощью hunk, применяя столько индивидуальных изменений, сколько может. Он копирует каждый файл как filename.ext.orig перед его модификацией и сохраняет отклоненные куски в filename.ext.rej. Отмените файлы .orig и вручную примените изменения, оставленные в .rej. Это легкая стратегия для небольших патчей.

Ответ 3

ок. работало.

$git am -3 --ignore-whitespace/c/temp/ git/format_since_origin.patch
Применение: patch 1
Применение: patch 2
Применение: patch 3

Почему мне нужно игнорировать пробелы во время применения?