Как отправить по электронной почте патчи, отформатированные с помощью git format-patch?
У меня есть серия патчей, которые я хочу отправить в проект с открытым исходным кодом, но я не могу понять, как правильно отформатировать электронную почту. Я попытался выполнить команду git format-patch, а затем прикрепил их все к электронному письму от Thunderbird, но все они были отклонены, поскольку каждый патч должен был представлять собой отдельное электронное письмо. Я хочу избегать команд git email, потому что у меня есть код в том же дереве, который является приватным, и некоторые, которые мне нужно отправить, что означает, что я должен иметь возможность вручную просматривать каждое письмо перед его отправкой.
Я хочу продолжать использовать Thunderbird, но, похоже, с ним проблемы, поскольку он переносит строки и делает исправления непригодными. Я также попытался настроить fetchmail и mutt, но буквально через 10 часов чтения и попыток я сдался. Есть ли не-fetchmail и не-thunderbird решение для отправки git-патчей?
3 ответа
git help format-patch
есть раздел "MUA-SPECIFIC HINTS", в котором упоминаются три подхода, специально предназначенные для использования Thunderbird с git:
- дополнение Toggle Word Wrap
- настроить Thunderbird так, чтобы он не искажал патчи
- или используя внешний редактор
Позвольте мне щедро вставить документацию по проекту Linux. Я не ограничиваю его только Thunderbird, потому что заголовок вашего вопроса указывает на общий интерес, а не только на Thunderbird. Кроме того, проверьте источник обновлений, возможно, по этой ссылке, так как вероятно, что обновления не будут распространяться на этот ответ.
Информация о почтовых клиентах для Linux
Гит
В наши дни большинство разработчиков используют git send-email
вместо обычных почтовых клиентов. Справочная страница для этого довольно хорошая. На приемном конце сопровождающие используют git am
применить патчи.
Если вы новичок в git, отправьте свой первый патч себе. Сохраните его как необработанный текст, включая все заголовки. Бежать git am raw_email.txt
а затем просмотрите список изменений с git log
, Когда это сработает, отправьте патч в соответствующий список рассылки.
Общие настройки
Патчи для ядра Linux отправляются по электронной почте, предпочтительно в виде встроенного текста в теле письма. Некоторые сопровождающие принимают вложения, но тогда вложения должны иметь тип содержимого "text / plain". Тем не менее, вложения обычно не одобряются, потому что это затрудняет цитирование частей исправления в процессе проверки исправления.
Почтовые клиенты, которые используются для исправлений ядра Linux, должны отправлять текст исправления без изменений. Например, они не должны изменять или удалять символы табуляции или пробелы, даже в начале или конце строк.
Не отправляйте патчи с "format = flowed". Это может вызвать неожиданные и нежелательные разрывы строк.
Не позволяйте вашему почтовому клиенту автоматически переносить слова. Это также может повредить ваш патч.
Почтовые клиенты не должны изменять кодировку кодировки текста. Почтовые патчи должны быть только в кодировке ASCII или UTF-8. Если вы настроите свой почтовый клиент для отправки писем с кодировкой UTF-8, вы избежите некоторых возможных проблем с кодировкой.
Почтовые клиенты должны генерировать и поддерживать заголовки References: или In-Reply-To:, чтобы поток почты не нарушался.
Копирование и вставка (или вырезание и вставка) обычно не работают для исправлений, поскольку вкладки преобразуются в пробелы. Использование xclipboard, xclip и / или xcutsel может работать, но лучше проверить это самостоятельно или просто избегать копирования и вставки.
Не используйте подписи PGP/GPG в почте, содержащей исправления. Это нарушает многие скрипты, которые читают и применяют патчи. (Это должно быть исправимо.)
Рекомендуется отправить патч себе, сохранить полученное сообщение и успешно применить его с помощью "патча" перед отправкой патчей в списки рассылки Linux.
Некоторые подсказки почтового клиента (MUA)
Вот некоторые конкретные советы по настройке MUA для редактирования и отправки исправлений для ядра Linux. Они не являются полными описаниями конфигурации программного пакета.
Легенда: TUI = текстовый интерфейс пользователя GUI = графический интерфейс пользователя
Альпийский (TUI)
Параметры конфигурации: в разделе "Настройки отправки":
- "Не отправлять потоковый текст" должен быть включен
- "Удалите пробелы перед отправкой" должен быть отключен
При составлении сообщения курсор должен быть помещен туда, где должен появиться патч, и затем, нажав CTRL-R, вы сможете указать файл патча для вставки в сообщение.
Почта Когтей (GUI)
Работает. Некоторые люди успешно используют это для исправлений.
Чтобы вставить патч, используйте Сообщение-> Вставить файл (CTRL+i) или внешний редактор.
Если вставленный патч нужно отредактировать в окне композиции Claws "Автоматическое обертывание" в "Конфигурация-> Настройки-> Компоновка-> Обтекание" должно быть отключено.
Эволюция (GUI)
Некоторые люди успешно используют это для исправлений.
При составлении письма выберите: "Преформатировать" в "Формат" -> "Стиль абзаца" -> "Предварительно отформатированный" (Ctrl-7) или на панели инструментов.
Затем используйте: Insert->Text File... (Alt-n x), чтобы вставить патч.
Вы также можете "diff -Nru old.c new.c | xclip", выбрать "Preformat", а затем вставить с помощью средней кнопки.
Kmail (графический интерфейс)
Некоторые люди успешно используют Kmail для исправлений.
Настройка по умолчанию не создавать в HTML является подходящей; не включайте его.
При составлении письма в опциях снимите флажок "перенос слов". Единственным недостатком является то, что любой текст, который вы вводите в электронном письме, не будет переноситься по словам, поэтому вам придется вручную переносить текст перед переносом. Самый простой способ обойти это - создать письмо с включенным переносом слов, а затем сохранить его как черновик. После того, как вы снова вытащите его из черновиков, теперь он будет жестко завернут в слова, и вы можете снять отметку "перенос слов", не теряя существующего переноса.
В нижней части вашего электронного письма поместите обычно используемый разделитель патчей перед вставкой вашего патча: три дефиса (---).
Затем в пункте меню "Сообщение" выберите "Вставить файл" и выберите свой патч. В качестве дополнительного бонуса вы можете настроить меню панели инструментов создания сообщений и поместить туда значок "вставить файл".
Сделайте окно композитора достаточно широким, чтобы не переносить строки. Начиная с KMail 1.13.5 (KDE 4.5.4), KMail будет применять перенос слов при отправке электронного письма, если перенос строк в окне компоновщика. Отключить перенос слов в меню "Параметры" недостаточно. Таким образом, если ваш патч имеет очень длинные строки, вы должны сделать окно композитора очень широким перед отправкой электронного письма. Смотрите: https://bugs.kde.org/show_bug.cgi?id=174034
Вы можете безопасно подписывать вложения GPG, но встроенный текст предпочтительнее для исправлений, поэтому не подписывайте их. Подписание патчей, которые были вставлены в виде встроенного текста, затруднит их извлечение из их 7-битной кодировки.
Если вам абсолютно необходимо отправлять исправления как вложения, а не вставлять их в виде текста, щелкните правой кнопкой мыши на вложении и выберите свойства, а затем выделите "Предложить автоматическое отображение", чтобы сделать вложение встроенным, чтобы сделать его более видимым.
При сохранении исправлений, отправленных в виде встроенного текста, выберите сообщение электронной почты, содержащее исправление, на панели списка сообщений, щелкните правой кнопкой мыши и выберите "Сохранить как". Вы можете использовать всю электронную почту без изменений в качестве патча, если она была правильно составлена. В настоящее время нет возможности сохранить электронное письмо, когда вы на самом деле просматриваете его в своем собственном окне - в bugzilla kmail был подан запрос, и, надеюсь, это будет решено. Электронные письма сохраняются в режиме "чтение-запись" только для пользователя, поэтому вам придется изменить их, чтобы сделать их читаемыми по группам и всему миру, если вы скопируете их в другом месте.
Lotus Notes (GUI)
Убежать от этого.
Матт (TUI)
Многие разработчики Linux используют Mutt, поэтому он должен работать довольно хорошо.
Mutt не поставляется с редактором, поэтому любой используемый вами редактор должен использоваться так, чтобы не было автоматических разрывов строк. Большинство редакторов имеют опцию "вставить файл", которая вставляет содержимое файла без изменений.
Чтобы использовать 'vim' с mutt: set editor="vi"
При использовании xclip введите команду:set paste перед средней кнопкой или shift-insert или используйте:r filename
если вы хотите включить патч в линию. (а)ttach отлично работает без "set paste".
Вы также можете создавать патчи с помощью 'git format-patch', а затем использовать Mutt для их отправки: $ mutt -H 0001-some-bug-fix.patch
Параметры конфигурации: он должен работать с настройками по умолчанию. Тем не менее, рекомендуется установить для send_charset значение: set send_charset="us-ascii:utf-8"
Матт очень настраиваемый. Вот минимальная конфигурация, чтобы начать использовать Mutt для отправки исправлений через Gmail:
# .muttrc
# ================ IMAP ====================
set imap_user = 'yourusername@gmail.com'
set imap_pass = 'yourpassword'
set spoolfile = imaps://imap.gmail.com/INBOX
set folder = imaps://imap.gmail.com/
set record="imaps://imap.gmail.com/[Gmail]/Sent Mail"
set postponed="imaps://imap.gmail.com/[Gmail]/Drafts"
set mbox="imaps://imap.gmail.com/[Gmail]/All Mail"
# ================ SMTP ====================
set smtp_url = "smtp://username@smtp.gmail.com:587/"
set smtp_pass = $imap_pass
set ssl_force_tls = yes # Require encrypted connection
# ================ Composition ====================
set editor = `echo \$EDITOR`
set edit_headers = yes # See the headers when editing
set charset = UTF-8 # value of $LANG; also fallback for send_charset
# Sender, email address, and sign-off line must match
unset use_domain # because joe@localhost is just embarrassing
set realname = "YOUR NAME"
set from = "username@gmail.com"
set use_from = yes
В документах Mutt есть много дополнительной информации: http://dev.mutt.org/trac/wiki/UseCases/Gmail http://dev.mutt.org/doc/manual.html
Сосна (TUI)
У Pine были некоторые проблемы с усечением пробелов в прошлом, но все они должны быть исправлены сейчас.
Используйте альпийский (преемник сосны), если можете.
Параметры конфигурации: - quell-flowed-text необходим для последних версий - требуется опция "no-strip-whitespace-before-send"
Сильфида (GUI)
- Хорошо работает для встраивания текста (или использования приложений).
- Позволяет использовать внешний редактор.
- Медленно на больших папках.
- Не будет выполнять аутентификацию TLS SMTP через соединение без SSL.
- Имеет полезную линейку в окне создания.
- При добавлении адресов в адресную книгу неправильно отображается отображаемое имя.
Thunderbird (GUI)
Thunderbird - это клон Outlook, который любит искажать текст, но есть способы заставить его вести себя.
Разрешить использование внешнего редактора. Самое простое, что можно сделать с Thunderbird и патчами, это использовать расширение "внешнего редактора", а затем просто использовать ваш любимый $EDITOR для чтения / объединения патчей в основной текст. Для этого загрузите и установите расширение, затем добавьте для него кнопку, используя Вид-> Панели инструментов-> Настроить... и, наконец, просто нажмите на него в диалоговом окне "Создать".
Обратите внимание, что "внешний редактор" требует, чтобы ваш редактор не закрывался, или, другими словами, редактор не должен возвращаться перед закрытием. Возможно, вам придется пройти дополнительные флаги или изменить настройки вашего редактора. В частности, если вы используете gvim, вы должны передать опцию -f в gvim, поместив "/usr/bin/gvim -f" (если бинарный файл находится в /usr/bin) в поле текстового редактора во "внешнем редакторе" настройки. Если вы используете какой-либо другой редактор, пожалуйста, прочитайте его руководство, чтобы узнать, как это сделать.
Чтобы немного разбираться во внутреннем редакторе, сделайте это:
Измените настройки конфигурации Thunderbird, чтобы он не использовал format=flowed. Перейдите в "edit-> settings->advanced->config editor", чтобы открыть редактор реестра Thunderbird.
Установите для "mailnews.send_plaintext_flowed" значение "false"
Установите "mailnews.wraplength" от "72" до "0"
"Просмотр" > "Тело сообщения как" > "Простой текст"
"Вид" > "Кодировка символов" > "Юникод (UTF-8)"
TkRat (GUI)
Работает. Используйте "Вставить файл..." или внешний редактор.
Gmail (веб-интерфейс)
Не работает для отправки патчей.
Веб-клиент Gmail автоматически преобразует вкладки в пробелы.
В то же время он переносит строки каждые 78 символов с помощью разрывов строк в стиле CRLF, хотя проблему с tab2space можно решить с помощью внешнего редактора.
Другая проблема состоит в том, что Gmail будет кодировать base64 любое сообщение, которое не является символом ASCII. Это включает в себя такие вещи, как европейские имена.
Обычно вы можете просто перетащить файлы, сгенерированные git format-patch, в вашу папку "Черновики". Я знаю, что это по крайней мере работает с почтовым клиентом Evolution.
Если вы используете git format-patch, обязательно используйте его с Git 2.27 (второй квартал 2020 г.): вывод из "git format-patch
"использует кодировку RFC 2047 для букв, отличных от ASCII, наFrom:
а также Subject:
заголовки, чтобы их можно было напрямую передавать в программы электронной почты.
Добавлена новая опция для создания этих заголовков в необработанном виде.
Таким образом, вам не придется иметь дело с кодированием, если ваш почтовый клиент понимает только ASCII.
См. Commit 19d097e (8 апреля 2020 г.) Эммы Брукс (``).
(Слияние Junio C Hamano -gitster
- в коммите f4216e5, 22 апр 2020 г.)
format-patch
: учить--no-encode-email-headers
Подписано: Эмма Брукс
Когда коммиты или авторы содержат символы, отличные от ASCII,
git format-patch
Q-кодирует их, чтобы их можно было безопасно пересылать по электронной почте.Однако, если метод передачи патча отличается от электронной почты (инструменты веб-обзора, sneakernet), это только усложняет чтение метаданных патча без предварительного его применения (если вы не можете декодировать RFC 2047 в уме).
git am
а также некоторые почтовые программы поддерживают почту без Q-кодирования, как описано в RFC 6531.добавлять
--[no-]encode-email-headers
а такжеformat.encodeEmailHeaders
чтобы позволить пользователю контролировать это поведение.