17

我有一系列想要发送到开源项目的补丁,但我无法弄清楚如何正确格式化电子邮件。我尝试运行 git format-patch 命令,然后将它们全部附加到来自 Thunderbird 的电子邮件中,但它们都被拒绝了,因为每个补丁本身应该是一封单独的电子邮件。我想避免使用 git email 命令,因为我在同一棵树中拥有私有代码和一些需要发送的代码,这意味着我需要能够在发送之前手动查看每封电子邮件。

我想继续使用 Thunderbird,但它似乎有问题,因为它会换行并使补丁无法使用。我也尝试设置 fetchmail 和 mutt,但经过 10 个小时的阅读和尝试后,我放弃了。是否有用于发送 git 补丁的非 fetchmail 和非 Thunderbird 解决方案?

4

4 回答 4

12

让我大方地贴一下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) 提示

以下是一些用于编辑和发送 Linux 内核补丁的特定 MUA 配置提示。这些并不意味着是完整的软件包配置摘要。

图例: TUI = 基于文本的用户界面 GUI = 图形用户界面

高山 (TUI)

配置选项:在“发送首选项”部分:

  • 必须启用“不发送流式文本”
  • 必须禁用“发送前去除空白”

编写消息时,光标应放在补丁应出现的位置,然后按 CTRL-R 让您指定要插入消息的补丁文件。

爪子邮件(GUI)

作品。有些人成功地将它用于补丁。

要插入补丁,请使用 Message->Insert File (CTRL+i) 或外部编辑器。

如果必须在 Claws 合成窗口中编辑插入的补丁,则应禁用 Configuration->Preferences->Compose->Wrapping 中的“Auto wrapping”。

进化(GUI)

有些人成功地将它用于补丁。

撰写邮件时选择:格式->段落样式->预格式化(Ctrl-7)或工具栏的预格式化

然后使用:Insert->Text File... (Alt-n x) 插入补丁。

您也可以“diff -Nru old.c new.c | xclip”,选择 Preformat,然后使用中间按钮粘贴。

邮件 (GUI)

有些人成功地使用 Kmail 进行补丁。

不写HTML的默认设置是合适的;不要启用它。

撰写电子邮件时,在选项下,取消选中“自动换行”。唯一的缺点是您在电子邮件中键入的任何文本都不会自动换行,因此您必须在补丁之前手动自动换行文本。解决此问题的最简单方法是撰写启用自动换行的电子邮件,然后将其另存为草稿。一旦您从草稿中再次将其拉出,它现在是硬自动换行的,您可以取消选中“自动换行”而不会丢失现有的换行。

在您的电子邮件底部,在插入补丁之前放置常用的补丁分隔符:三个连字符 (---)。

然后从“消息”菜单项中,选择插入文件并选择您的补丁。作为额外的奖励,您可以自定义消息创建工具栏菜单并将“插入文件”图标放在那里。

使作曲家窗口足够宽,以免换行。从 KMail 1.13.5 (KDE 4.5.4) 开始,如果行在 Composer 窗口中换行,KMail 将在发送电子邮件时应用自动换行。在选项菜单中禁用自动换行是不够的。因此,如果您的补丁有很长的行,您必须在发送电子邮件之前使作曲家窗口非常宽。见:https ://bugs.kde.org/show_bug.cgi?id=174034

您可以安全地对附件进行 GPG 签名,但补丁首选内嵌文本,因此不要 GPG 对其进行签名。已作为内联文本插入的签名补丁将使它们难以从其 7 位编码中提取。

如果您绝对必须将补丁作为附件发送而不是作为文本内联,请右键单击附件并选择属性,然后突出显示“建议自动显示”以使附件内联以使其更易于查看。

保存作为内联文本发送的补丁时,从消息列表窗格中选择包含补丁的电子邮件,右键单击并选择“另存为”。如果正确编写,您可以将未修改的整个电子邮件用作补丁。当您实际在其自己的窗口中查看电子邮件时,目前没有保存电子邮件的选项 - kmail 的 bugzilla 已提交请求,希望这将得到解决。电子邮件保存为仅供用户读写,因此如果您将它们复制到其他地方,则必须对它们进行 chmod 以使它们成为组和世界可读。

Lotus Notes (图形用户界面)

逃离它。

穆特 (TUI)

很多 Linux 开发人员都使用 mutt,所以它必须运行良好。

Mutt 没有附带编辑器,因此无论您使用什么编辑器,都应该以没有自动换行符的方式使用。大多数编辑器都有一个“插入文件”选项,可以将文件的内容原封不动地插入。

将 'vim' 与 mutt 一起使用: set editor="vi"

如果使用 xclip,请键入命令 :set paste before middle button 或 shift-insert 或使用 :r filename

如果你想包含补丁内联。(a) 无需“设置粘贴”即可正常工作。

您还可以使用 'git format-patch' 生成补丁,然后使用 Mutt 发送它们: $ mutt -H 0001-some-bug-fix.patch

配置选项:它应该使用默认设置。但是,最好将“send_charset”设置为:set send_charset="us-ascii:utf-8"

Mutt 是高度可定制的。这是开始使用 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 过去曾遇到过一些空格截断问题,但现在都应该修复这些问题。

如果可以,请使用 alpine(松树的继任者)。

配置选项: - 最新版本需要 quell-flowed-text - 需要“no-strip-whitespace-before-send”选项

西尔菲德 (GUI)

  • 适用于内联文本(或使用附件)。
  • 允许使用外部编辑器。
  • 大文件夹速度很慢。
  • 不会通过非 SSL 连接执行 TLS SMTP 身份验证。
  • 在撰写窗口中有一个有用的标尺栏。
  • 将地址添加到通讯簿无法正确理解显示名称。

雷鸟 (GUI)

Thunderbird 是一个 Outlook 克隆,它喜欢破坏文本,但有一些方法可以强制它表现出来。

  • 允许使用外部编辑器:使用 Thunderbird 和补丁最简单的方法是使用“外部编辑器”扩展,然后使用您最喜欢的 $EDITOR 将补丁读取/合并到正文中。为此,请下载并安装扩展,然后使用 View->Toolbars->Customize... 添加一个按钮,最后在 Compose 对话框中单击它。

    请注意,“外部编辑器”要求你的编辑器不能分叉,或者换句话说,编辑器在关闭之前不能返回。您可能需要传递其他标志或更改编辑器的设置。最值得注意的是,如果您使用的是 gvim,那么您必须通过将“/usr/bin/gvim -f”(如果二进制文件在 /usr/bin 中)放入“外部编辑器”中的文本编辑器字段来将 -f 选项传递给 gvim设置。如果您正在使用其他编辑器,请阅读其手册以了解如何执行此操作。

要从内部编辑器中获得一些意义,请执行以下操作:

  • 编辑您的 Thunderbird 配置设置,使其不会使用 format=flowed。转到“编辑->首选项->高级->配置编辑器”以调出雷鸟的注册表编辑器。

  • 将“mailnews.send_plaintext_flowed”设置为“false”

  • 将“mailnews.wraplength”从“72”设置为“0”

  • “查看”>“消息正文为”>“纯文本”

  • “查看”>“字符编码”>“Unicode (UTF-8)”

TkRat (图形用户界面)

作品。使用“插入文件...”或外部编辑器。

Gmail(网络图形用户界面)

不适用于发送补丁。

Gmail 网络客户端会自动将制表符转换为空格。

同时,它使用 CRLF 样式换行符每 78 个字符换行一次,尽管可以使用外部编辑器解决 tab2space 问题。

另一个问题是Gmail 将对任何具有非ASCII 字符的邮件进行base64 编码。这包括欧洲名字之类的东西。

于 2016-07-08T08:29:48.343 回答
9

git help format-patch有一个“MUA-SPECIFIC HINTS”部分提到了三种专门使 Thunderbird 可与 git 一起使用的方法:

  • Toggle Word Wrap 附加组件
  • 将 Thunderbird 配置为不破坏补丁
  • 或使用外部编辑器
于 2011-06-30T15:34:40.030 回答
8

您通常可以将 git format-patch 生成的文件拖放到您的 Drafts 文件夹中。我知道这至少适用于 Evolution 邮件客户端。

于 2011-06-30T14:04:00.060 回答
1

如果您使用 git format-patch,请确保将其与 Git 2.27(2020 年第二季度)一起使用:“ git format-patch”的输出使用RFC 2047 编码非 ASCII 字母From:Subject:标头,以便可以直接将其提供给 e-邮件程序。

添加了一个新选项来以原始格式生成这些标头。

这样,如果您的电子邮件客户端只理解 ASCII,您就不必处理编码。

请参阅Emma Brooks (``)的提交 19d097e(2020 年 4 月 8 日) 。(由Junio C Hamano 合并 -- --提交 f4216e5中,2020 年 4 月 22 日)
gitster

format-patch: 教--no-encode-email-headers

签字人:艾玛·布鲁克斯

当提交主题或作者有非 ASCII 字符时,Q 编码它们,以便它们可以通过电子邮件安全地发送。git format-patch

但是,如果补丁传输方法不是电子邮件(网络审查工具,sneakernet),这只会使补丁元数据在不首先应用的情况下更难阅读(除非您可以在头脑中解码 RFC 2047)。

git am以及一些电子邮件软件支持非 Q 编码的邮件,如RFC 6531中所述。

添加--[no-]encode-email-headersformat.encodeEmailHeaders让用户控制此行为。

于 2020-04-26T18:29:11.587 回答