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

Chr*_*s H 14 git email patch format-patch

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

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

Fre*_*ord 11

让我慷慨地粘贴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编码发送电子邮件,则可以避免一些可能的字符集问题.

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

复制粘贴(或剪切和粘贴)通常不适用于补丁,因为选项卡转换为空格.使用xclipboard,xclip和/或xcutsel可能有效,但最好自己测试一下,或者只是避免复制粘贴.

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

在向Linux邮件列表发送补丁之前,最好向自己发送补丁,保存收到的消息,然后使用"补丁"成功应用补丁.

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

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

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

高山(TUI)

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

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

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

爪子邮件(GUI)

作品.有些人成功地使用它来修补补丁.

要插入补丁,请使用消息 - >插入文件(CTRL + i)或外部编辑器.

如果必须在Claws组合窗口中编辑插入的补丁,请在Configuration-> Preferences-> Compose-> Wrapping中禁用"自动换行".

进化(GUI)

有些人成功地使用它来修补补丁.

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

然后使用:Insert-> Text File ...(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,请键入以下命令:在中间按钮或shift-insert之前设置粘贴或使用: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
Run Code Online (Sandbox Code Playgroud)

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"选项

Sylpheed(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.转到"编辑 - >首选项 - >高级 - >配置编辑器"以打开thunderbird的注册表编辑器.

  • 将"mailnews.send_plaintext_flowed"设置为"false"

  • 将"mailnews.wraplength"从"72"设置为"0"

  • "查看">"邮件正文">"纯文本"

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

TkRat(GUI)

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

Gmail(Web GUI)

不适用于发送补丁.

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

同时,它使用CRLF样式换行符每78个字符包裹行,尽管tab2space问题可以通过外部编辑器解决.

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


Nic*_*ser 8

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

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


Jac*_*nds 7

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

  • 我在 Evolution 中看到的问题是它包裹了单词,从而弄乱了补丁:-/ 至少对我来说是这样。 (2认同)