Git: у патча нет действительного адреса электронной почты - программирование
Подтвердить что ты не робот

Git: у патча нет действительного адреса электронной почты

У меня есть патч файл.

Я хочу применить этот патч к моему коду в репозитории git.

Когда я использовал subversion, этот процесс был довольно простым: щелкните правой кнопкой мыши → черепаха svn → применить патч. Он всегда работает так, как я ожидал.

Но я не могу этого сделать, используя git. git не применяется мой патч. Он жалуется на

Патч не имеет действительного адреса электронной почты.

Итак, мой вопрос: "Как применить файл исправления в этой ситуации?"

4b9b3361

Ответ 1

Git созданные патчи предназначены для использования с инструментами Git. Используйте

git apply <patch>

Если патч не создан с помощью Git, просто используйте программу патчей "за спиной" Git. Часто это программа "patch":

patch <patch>

После применения патча добавьте и зафиксируйте в Git, как обычно.

Ответ 2

Это работает с файлами mbox, загружаемыми с pipermail, используемыми многими проектами с открытым исходным кодом. Вероятно, это не работает в случае OP, но тот же самый симптом/вопрос возникает при использовании git am с извлеченными сообщениями/патчами с помощью pipermail.


Сделайте резервную копию файла и отредактируйте его, чтобы добавить строку,

From: [email protected] (Proper Name)

Часто строка уже существует, но функции защиты от спама могут преобразовать знак @ в текст в. Вы можете исправить кучу файлов с помощью команды gnu sed, например,

sed -ie 's/\(From:.*\) at /\[email protected]/' *.patch

Это просто заменяет знак "at" знаком @. После этого git am должен принять его.


Если у вас есть доступ к репозиторию git, вы можете использовать обычные команды,

  • git checkout oldbranch
  • git format-patch HEAD~4 Это сделает четыре файла, которые являются патчами последних изменений (измените номер для вашего случая).
  • git checkout master
  • git am *.patch

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


Такие инструменты, как gitk и kdiff do НЕ, генерируют те же данные, что и patch-patch, и вы не получаете историю фиксации. Если у вас есть данные этого типа, вы должны использовать git apply или генерировать исправления, как указано выше.

Смотрите: Разница между git format-patch и git diff.

Ответ 3

Если вам удобнее использовать графический интерфейс вместо командной строки, существует довольно много инструментов, которые делают относительно простым выполнение большого количества задач в Git, включая исправление исправлений). Самый полезный, который я нашел, SourceTree, но я уверен, что там другие хорошие там, если вы будете искать.

Ответ 4

Возможно, эта ошибка возникает, если ваше сообщение фиксации имеет строку, начинающуюся с From:. Например, у меня был патч, где я установил опечатку, а в теле сообщения о совершении я имел:

Fixes a typo.
From: 873524cab1 "Introduced some bug on this commit"

Файл .patch, созданный с помощью format-patch, имел две строки From:, один из которых был адресом электронной почты, а другой - моим паршивым сообщением. Git am собирал вторую строку From: и пытался найти адрес электронной почты.

Исправление заключалось в том, чтобы изменить сообщение фиксации, чтобы не было From: в начале строки.