Git: у патча нет действительного адреса электронной почты
У меня есть патч файл.
Я хочу применить этот патч к моему коду в репозитории git.
Когда я использовал subversion, этот процесс был довольно простым: щелкните правой кнопкой мыши → черепаха svn → применить патч. Он всегда работает так, как я ожидал.
Но я не могу этого сделать, используя git. git не применяется мой патч. Он жалуется на
Патч не имеет действительного адреса электронной почты.
Итак, мой вопрос:
"Как применить файл исправления в этой ситуации?"
Ответы
Ответ 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:
в начале строки.