Git 2.3.0 (февраль 2015 г.) предложит еще одну новую опцию: --transfer-encoding
, чтобы указать используемую кодировку передачи (quoted-printable, 8bit, base64) вместо того, чтобы полагаться только на--keep-cr
.
git send-email
справочная страница .
git am
справочная страница .
См. коммит 8d81408 от Паоло Бонзини (bonzini
) :
git-send-email
: добавить --transfer-encoding
опция
список рассылки детализирует проблемы при применении исправлений с "git am
" в репозитории с окончаниями строк CRLF.
В примере в потоке, репозиторий возник из "git-svn
", поэтому это не такможно использовать core.eol
и друзей на нем.
Прямо сейчас, лучший вариант - использовать "git am --keep-cr
".
Однако, когда патч создает новые файлы, процесс приложения патча будет отклоненновый файл, потому что он находит строку "/dev/null\r
" вместо "/dev/null
".
Проблема в том, что SMTP-транспорт является CRLF-небезопасным .
SeПоиск патча по электронной почте аналогичен прохождению его через «dos2unix | unix2dos
».
Вновь введенные CRLF обычно прозрачны, потому что git-am
удаляет их.Параметр keepcr=true
сохраняет их, но в основном он работает случайно, и было бы очень проблематично иметь рабочий процесс "git am
" в репозитории со смешанными окончаниями строк LF и CRLF.
MIME-решение для этого - передача в кавычках для печати, включающая .
Это не то, что мы хотим включить по умолчанию, так как это делает ужасным просмотр полученных писем.
Тем не менее, это очень хорошее соответствие для проектов, которые хранят окончания строк CRLF в репозитории.
Единственный недостаток quoted-printable заключается в том, что исправления в кавычках не применяются, если сопровождающийиспользует "git am --keep-cr
".
Это связано с тем, что декодированный патч будет иметь два возврата каретки в конце строки.
Поэтому добавьте поддержку base64, а также кодировку передачи , которая делает полученнымэлектронные письма просто невозможно просмотреть за пределами MUA (Mail User Agent) , но на самом деле просто работает.
Патч охватывает все базы, включая Users, которые все еще живут в конце 80-х, также предоставляя 7-битную кодировку передачи контента, которая отказывается отправлять электронные письма с не-ASCII символом в них.
И, наконец, «8bit» добавит заголовок Content-Transfer-Encoding, но в противном случаеничего не делать.
Документ для git send-email теперь будет содержать:
--transfer-encoding=(7bit|8bit|quoted-printable|base64)
Укажите кодировку передачи, которая будет использоваться для отправки сообщения по SMTP.
7bit потерпит неудачу при обнаружении сообщения не-ASCII.
Quoted-printable может быть полезен, когда репозиторий содержит файлы, содержащие возврат каретки, но делает необработанный файл электронной почты патча (как сохраненный из MUA) намного труднее проверять вручную.
base64 еще более глупыйдоказательство, но также еще более непрозрачный.
По умолчанию используется значение конфигурации 'sendemail.transferEncoding
';если это не указано, git
будет использовать 8 бит и не будет добавлять заголовок Content-Transfer-Encoding.