如何通过git format-patch格式化补丁?

时间:2011-06-30 13:47:34

标签: git email patch format-patch

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

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

4 个答案:

答案 0 :(得分:10)

让我慷慨地粘贴documentation of the Linux project。我并不限制它使用Thunderbird,因为你问题的标题表示普遍的兴趣,而不仅仅是Thunderbird。此外,请检查更新源,可能是this link,因为更新可能不会传播到此答案。

电子邮件客户端信息Linux

GIT中

现在大多数开发人员使用git send-email而不是常规 邮件客户端。这个手册非常好。在接收 最后,维护者使用git am来应用补丁。

如果您是git的新手,请将您的第一个补丁发送给自己。保存 作为原始文本,包括所有标题。运行git am raw_email.txt和 然后使用git log查看更改日志。当它工作,然后发送 适当邮件列表的补丁。

常规首选项

Linux内核的补丁通过电子邮件提交,最好是 电子邮件正文中的内联文本。一些维护者接受 附件,但随后附件应具有内容类型 " text / plain的&#34 ;.但是,附件通常不赞成因为 它使得在补丁中引用补丁的部分更加困难 审查过程。

用于Linux内核补丁的电子邮件客户端应该发送 补丁文字未触动过。例如,他们不应修改或删除选项卡 或空格,即使在行的开头或结尾。

请勿使用" format = flowed"发送补丁。这可能会导致意外 和不需要的换行符。

不要让您的电子邮件客户端为您自动换行。 这也会破坏你的补丁。

电子邮件客户端不应修改文本的字符集编码。 电子邮件补丁应仅采用ASCII或UTF-8编码。 如果您将电子邮件客户端配置为使用UTF-8编码发送电子邮件, 你避免了一些可能的字符集问题。

电子邮件客户端应生成并维护引用:或In-Reply-To: 标题,以便邮件线程不会被破坏。

复制粘贴(或剪切和粘贴)通常不适用于补丁 因为标签转换为空格。使用xclipboard,xclip和/或 xcutsel可以工作,但最好自己测试一下或者只是避免 拷贝和粘贴。

不要在包含补丁的邮件中使用PGP / GPG签名。 这会破坏许多读取和应用补丁的脚本。 (这应该是可以解决的。)

向自己发送补丁是个好主意,保存收到的消息, 并成功将其应用于补丁'在向Linux发送补丁之前 邮件列表。

某些电子邮件客户端(MUA)提示

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

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

Alpine(TUI)

配置选项: 在"发送首选项"部分:

  • "不发送流动文本"必须启用
  • "在发送之前删除空白"必须被禁用

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

Claws Mail(GUI)

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

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

如果必须在Claws组合窗口中编辑插入的补丁 "自动包装"在Configuration-> Preferences-> Compose-> Wrapping应该是 禁用。

Evolution(GUI)

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

撰写邮件时选择:预格式化   from Format-> Paragraph Style-> Preformatted(Ctrl-7)   或工具栏

然后使用:   插入 - >文本文件...(Alt-n x) 插入补丁。

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

Kmail(GUI)

有些人成功使用Kmail获取补丁。

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

撰写电子邮件时,在选项下,取消选中"自动换行"。唯一的 缺点是您在电子邮件中键入的任何文本都不会自动换行 所以你必须在补丁之前手动自动换行文字。最简单的 解决这个问题的方法是在启用自动换行的情况下撰写电子邮件,然后保存 它作为草案。一旦你从你的草稿中再次提起它,现在很难 自动换行,你可以取消选中"自动换行"不失现有的 包装

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

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

使作曲家窗口足够宽,以便没有线条包裹。作为 KMail 1.13.5(KDE 4.5.4),KMail将在发送时应用自动换行 如果线条在作曲家窗口中换行,则为电子邮件。有自画词 选项菜单中的禁用功能不足。因此,如果您的补丁非常 长行,你必须在发送之前使作曲家窗口非常宽 电子邮件。请参阅:https://bugs.kde.org/show_bug.cgi?id=174034

您可以安全地对GPG签名附件,但首选内联文字 补丁所以不要GPG签名。签署已插入的补丁 因为内联文本会使从7位编码中提取它们变得棘手。

如果您绝对必须发送补丁作为附件而不是内联 将它们作为文本,右键单击附件并选择属性,然后选择 突出显示"建议自动显示"使附件内联到 让它更具可见性。

保存作为内联文本发送的修补程序时,请选择该电子邮件 包含消息列表窗格中的补丁,右键单击并选择 "另存为"。您可以将未修改的整个电子邮件用作补丁(如果是) 适当的组成。目前没有选项可以保存您的电子邮件 实际上是在自己的窗口中查看它 - 已经提交了请求 在kmail的bugzilla,希望这将得到解决。电子邮件已保存 作为用户的读写,所以你必须chmod他们来制作它们 如果你将它们复制到其他地方,则可以读取组和世界。

Lotus Notes(GUI)

远离它。

Mutt(TUI)

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

Mutt没有编辑器,所以你使用的编辑器应该是 以没有自动换行符的方式使用。大多数编辑都有 "插入文件"不加改变地插入文件内容的选项。

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

如果使用xclip,请键入命令   :设置粘贴   在中间按钮或换档插入或使用之前   :r filename

如果要包含内联补丁。 (a)ttach工作正常,没有"设置粘贴"。

你也可以用' 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

Pine(TUI)

Pine过去曾遇到过一些空白截断问题,但这些问题 现在都应该修好了。

如果可以的话,使用高山(松树的继任者)。

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

Sylpheed(GUI)

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

Thunderbird(GUI)

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

  • 允许使用外部编辑器: 使用Thunderbird和补丁最简单的方法就是使用 "外部编辑"扩展然后只使用你最喜欢的$ EDITOR 用于读取/合并补丁到正文中。为此,请下载 并安装扩展,然后使用添加按钮 查看 - >工具栏 - >自定义...最后只需点击它即可 撰写对话框。

    请注意"外部编辑"要求你的编辑不得 fork,或者换句话说,编辑器在关闭之前不得返回。 您可能必须传递其他标志或更改您的设置 编辑。最值得注意的是,如果你使用的是gvim,那么你必须传递-f 选择gvim放入" / usr / bin / gvim -f" (如果二进制文件在 / usr / bin)到"外部编辑器"中的文本编辑器字段设置。如果你 正在使用其他编辑器,请阅读其手册以了解具体方法 这样做。

要在内部编辑器中击败某种感觉,请执行以下操作:

  • 编辑您的Thunderbird配置设置,以便它不会使用format = flowed。 转到" edit-> preferences-> advanced-> config editor"提出来 thunderbird的注册表编辑器。

  • 设置" mailnews.send_plaintext_flowed"到"假"

  • 设置" mailnews.wraplength"来自" 72"到" 0"

  • "查看" > "消息体As" > "纯文本"

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

TkRat(GUI)

作品。使用"插入文件..."或外部编辑。

Gmail(网页GUI)

不适用于发送补丁。

Gmail网络客户端会自动将标签转换为空格。

同时,每隔78个字符包含CRLF样式换行符 虽然tab2space问题可以通过外部编辑器来解决。

另一个问题是Gmail会对任何有消息的邮件进行64位编码 非ASCII字符。这包括欧洲名称之类的东西。

答案 1 :(得分:7)

您通常只需将git format-patch生成的文件拖放到“草稿”文件夹中即可。我知道这至少可以与Evolution邮件客户端一起使用。

答案 2 :(得分:7)

git help format-patch有一节“MUA-SPECIFIC HINTS”提到了三种方法可以使用git专门使Thunderbird可用:

  • Toggle Word Wrap附加组件
  • 配置Thunderbird以不破坏补丁
  • 或使用外部编辑器

答案 3 :(得分:0)

如果您正在使用git format-patch,请确保将其与Git 2.27(2020年第二季度)一起使用:来自“ git format-patch”的输出将RFC 2047 encoding用作非ASCII字母, From:Subject:标头,以便可以直接将其输入电子邮件程序。

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

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

请参见commit 19d097eEmma Brooks (``)(2020年4月8日)。
(由Junio C Hamano -- gitster --commit f4216e5中合并,2020年4月22日)

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

签名人:艾玛·布鲁克斯

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

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

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

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