非常教程

Git参考手册

电子邮件 | Email

git send-email

名称(Name)

git-send-email - 以电子邮件的形式发送一组补丁

Synopsis

git send-email [options] <file|directory|rev-list options>…​
git send-email --dump-aliases

描述

接受命令行上给出的补丁并将其发送出去。修补程序可以指定为文件,目录(这将发送目录中的所有文件),或直接作为修订列表。在最后一种情况下,git-format-patch [1]接受的任何格式都可以传递给 git send-email。

电子邮件的标题可通过命令行选项进行配置。如果未在命令行中指定,则系统将提示用户使用启用了 ReadLine 的接口来提供必要的信息。

接受补丁文件有两种格式:

  1. mbox 格式文件这是 git-format-patch [1]生成的内容。大多数标题和 MIME 格式都会被忽略。
  2. Greg Kroah-Hartman send_lots_of_email.pl脚本使用的原始格式此格式预期文件的第一行包含消息的“Cc:”值和“Subject:”作为第二行。

选项

构成

--annotate

查看并编辑您即将发送的每个补丁。默认值是sendemail.annotate。请参阅 CONFIGURATION 部分sendemail.multiEdit

--bcc=<address>,…​

为每封电子邮件指定一个“密件抄送:”值。默认值是sendemail.bcc

此选项可能会多次指定。

--cc=<address>,…​

为每封电子邮件指定一个开始的“抄送:”值。默认值是sendemail.cc

此选项可能会多次指定。

--compose

调用文本编辑器(请参阅 git-var [1]中的 GIT_EDITOR)以编辑补丁系列的介绍性消息。

何时--compose使用,git send-email 将使用消息中指定的 From,Subject 和 In-Reply-To头。如果邮件正文(在标题和空白行之后键入的内容)仅包含空白(或 Git:前缀)行,则不会发送摘要,但发件人,主题和收件人回复标题将除非被移除,否则应该使用。

缺少 From 或 In-Reply-To 头将被提示输入。

请参阅 CONFIGURATION 部分sendemail.multiEdit

--from=<address>

指定电子邮件的发件人。如果未在命令行中指定,sendemail.from则使用配置选项的值。如果没有设置命令行选项sendemail.from,则会提示用户输入值。提示的缺省值将是 GIT_AUTHOR_IDENT 或 GIT_COMMITTER_IDENT 的值,如果未设置,则返回“git var -l”。

--in-reply-to=<identifier>

使第一封邮件(或所有邮件--no-thread)显示为对给定 Message-Id 的回复,从而避免中断线程以提供新的补丁系列。根据设置,第二封和随后的电子邮件将作为回复发送--[no-]chain-reply-to

因此,例如,当--thread--no-chain-reply-to被指定,第二和后续的补丁将是回复到第一个像在下面,其中插图[PATCH v2 0/3]是答复[PATCH 0/2]

[PATCH 0/2] Here is what I did...
  [PATCH 1/2] Clean up and tests
  [PATCH 2/2] Implementation
  [PATCH v2 0/3] Here is a reroll
    [PATCH v2 1/3] Clean up
    [PATCH v2 2/3] New tests
    [PATCH v2 3/3] Implementation

只有在--compose 也被设置时才有必要。如果--compose 未设置,则会提示输入。

--subject=<string>

指定电子邮件线索的初始主题。只有在--compose 也被设置时才有必要。如果--compose 未设置,则会提示输入。

--to=<address>,…​

指定生成的电子邮件的主要收件人。一般来说,这将是所涉及项目的上游维护者。默认值是sendemail.to配置值的值; 如果未指定,并且未指定--to-cmd,则会提示此处。

该选项可能会多次指定。

--8bit-encoding=<encoding>

遇到非 ASCII 消息或未声明其编码的主题时,请添加标题/引用以指示它在<编码>中编码。默认值是该值sendemail.assume8bitEncoding; 如果未指定,则会提示是否遇到任何非ASCII文件。

请注意,没有任何尝试验证编码。

--compose-encoding=<encoding>

指定撰写邮件的编码。默认值是该值sendemail.composeencoding; 如果没有指定,则假定为 UTF-8。

--transfer-encoding=(7bit|8bit|quoted-printable|base64)

指定用于通过 SMTP 发送消息的传输编码。遇到非 ASCII 消息时,7bit将失败。当存储库包含包含回车符的文件时,quoted-printable 可能很有用,但会使原始修补程序电子邮件文件(如从 MUA 保存的文件)难以手动检查。base64 更加笨手笨脚,但也更加不透明。默认值是sendemail.transferEncoding配置值的值; 如果没有指定,git 将使用8位而不添加 Content-Transfer-Encoding 标头。

--xmailer --no-xmailer

添加(或阻止添加)“X-Mailer:”标题。默认情况下,添加标题,但可以通过设置sendemail.xmailer配置变量来关闭标题false

发出

--envelope-sender=<address>

指定用于发送电子邮件的信封发件人。如果您的默认地址不是订阅列表的地址,这很有用。为了使用From地址,请将该值设置为“auto”。如果使用 sendmail 二进制文件,则必须具有-f参数的适当权限。默认值是sendemail.envelopeSender配置变量的值; 如果没有指定,选择信封发件人留给您的 MTA。

--smtp-encryption=<encryption>

指定要使用的加密,ssl或者tls。任何其他值都会恢复为普通 SMTP。默认值是sendemail.smtpEncryption

--smtp-domain=<FQDN>

指定在 SMTP 服务器的 HELO / EHLO 命令中使用的完全限定的域名(FQDN)。一些服务器需要 FQDN 来匹配您的 IP 地址。如果未设置,git send-email会自动尝试确定您的 FQDN。默认值是sendemail.smtpDomain

--smtp-auth=<mechanisms>

空白分隔的允许的 SMTP-AUTH 机制列表。该设置强制只使用列出的机制。例:

$ git send-email --smtp-auth="PLAIN LOGIN GSSAPI" ...

如果至少有一个指定的机制与 SMTP 服务器通告的机制匹配,并且所用的 SASL 库支持该机制,则使用该机制进行身份验证。如果既没有sendemail.smtpAuth也没有--smtp-auth指定,可以使用 SASL 库支持的所有机制。

--smtp-pass=<password>

SMTP-AUTH 的密码。该参数是可选的:如果未指定参数,则将使用空字符串作为密码。默认值是值sendemail.smtpPass,但--smtp-pass总是覆盖此值。

此外,密码不需要在配置文件或命令行中指定。如果指定了用户名(带有--smtp-usersendemail.smtpUser),但没有指定密码(带有--smtp-passsendemail.smtpPass),则使用密码获取git-credential

--smtp-server=<host>

如果设置,则指定要使用的传出 SMTP 服务器(例如,smtp.example.com或原始IP地址)。或者,它可以指定类似 sendmail 的程序的完整路径名; 该计划必须支持该-i选项。默认值可以由sendemail.smtpServer配置选项指定; 内置的默认是/usr/sbin/sendmail或者/usr/lib/sendmail如果这样的程序是可用的,localhost否则。

--smtp-server-port=<port>

指定一个与默认端口不同的端口(SMTP 服务器通常监听 smtp 端口25,但也可以侦听提交端口587或公共 SSL smtp 端口465); 符号端口名称(例如“提交”而不是 587)也被接受。该端口也可以通过sendemail.smtpServerPort配置变量进行设置。

--smtp-server-option=<option>

如果设置,则指定要使用的传出 SMTP 服务器选项。默认值可以由sendemail.smtpServerOption配置选项指定。

对于要传递给服务器的每个选项,必须重复--smtp-server-option 选项。同样,每个选项都必须使用配置文件中的不同行。

--smtp-ssl

旧版别名--smtp-encryption ssl

--smtp-ssl-cert-path

用于 SMTP SSL / TLS 证书验证的可信 CA 证书存储区的路径(可以是经过处理的目录,也可以是c_rehash包含一个或多个连接在一起的PEM格式证书的单个文件:请参阅 verify(1)-CAfile 和 -CApath for 关于这些的更多信息)。将其设置为空字符串以禁用证书验证。默认为sendemail.smtpsslcertpath配置变量的值(如果设置),否则默认情况下支持 SSL 库的编译默认值(这应该是大多数平台上的最佳选择)。

--smtp-user=<user>

SMTP-AUTH 的用户名。默认值是sendemail.smtpUser; 的值。如果没有指定用户名(使用--smtp-usersendemail.smtpUser),则不会尝试进行身份验证。

--smtp-debug=0|1

启用(1)或禁用(0)调试输出。如果启用,将打印 SMTP 命令和回复。用于调试 TLS 连接和身份验证问题。

--batch-size=<num>

一些电子邮件服务器(例如 smtp.163.com)会限制每个会话(连接)发送的电子邮件数量,这会在发送多条消息时导致失败。使用此选项,send-email 将在发送$ <num>消息并等待几秒钟(请参阅--relogin-delay)并重新连接后断开连接,以解决此限制。您可能需要使用某种形式的凭证帮助程序,以避免每次发生这种情况时都必须重新输入密码。缺省为sendemail.smtpBatchSize配置变量。

--relogin-delay=<int>

在重新连接到 SMTP 服务器之前等待$ <int>秒。与--batch-size 选项一起使用。缺省为sendemail.smtpReloginDelay配置变量。

自动化

--to-cmd=<command>

指定一个命令为每个补丁文件执行一次,该文件应生成特定于补丁文件的“To:”条目。此命令的输出必须是每行一个电子邮件地址。默认值是sendemail.tocmd配置值的值。

--cc-cmd=<command>

指定一个命令为每个补丁文件执行一次,该文件应生成补丁文件特定的“Cc:”条目。此命令的输出必须是每行一个电子邮件地址。默认值是sendemail.ccCmd配置值的值。

--no-chain-reply-to

如果已设置,每封电子邮件将作为对以前发送的电子邮件的回复发送。如果使用“--no-chain-reply-to”禁用,则首先发送的所有电子邮件将作为回复发送给第一封电子邮件。当使用这个时,建议给出的第一个文件是整个补丁系列的概述。默认情况下禁用,但sendemail.chainReplyTo可以使用配置变量启用它。

--identity=<identity>

配置标识。给出时,导致sendemail.<identity>sendemail部分中的值优先于部分中的值。默认标识是的值sendemail.identity

--no-signed-off-by-cc

如果已设置,请将添加到 Signed-off-by 或 Cc:行中的电子邮件添加到cc列表。默认值是sendemail.signedoffbycc配置值的值; 如果没有指定,默认为 --signed-off-by-cc。

--no-cc-cover

如果已设置,则在该系列的第一个补丁(通常为求职信)中的Cc:标题中找到的电子邮件将添加到每个电子邮件集的cc列表中。默认值是sendemail.cccover配置值的值; 如果未指定,则默认为--no-cc-cover。

--no-to-cover

如果已设置,则在系列的第一个补丁(通常为求职信)中的“收件人:”标题中找到的电子邮件将添加到每个电子邮件集的列表中。默认值是sendemail.tocover配置值的值; 如果未指定,则默认为 - 不覆盖。

--suppress-cc=<category>

指定一个额外的收件人类别以禁止以下的自动抄送:

  • author 将避免包括修补程序作者
  • self 将避免包括发件人
  • cc将避免在修补程序头文件中包含Cc行中提到的任何人,除了self(self用于此目的)。
  • bodycc将避免包括在补丁体(提交消息)中的Cc行中提到的任何人,除了self(self用于此)外。
  • sob将避免包括在自签名外的任何人(除此之外self)。
  • cccmd 将避免运行--cc-cmd。
  • body相当于sob+bodycc
  • all 将抑制所有自动cc值。

默认值是sendemail.suppresscc配置值的值; 如果没有指定,则默认为 - self如果指定了--suppress-from,并且指定了body--no-signed-off-cc。

--no-suppress-from

如果已设置,请不要将发件人:地址添加到cc:列表。默认值是sendemail.suppressFrom配置值的值; 如果未指定,则默认为--no-suppress-from。

--no-thread

如果设置了此项,则会将 In-Reply-To 和 References 标题添加到发送的每封电子邮件中。每个邮件是指以前的电子邮件(deep每个git format-patch字词的线程)还是第一封电子邮件(shallow线程)都由“--no-chain-reply-to”来管理。

如果使用“--no-thread”禁用,则不会添加这些标头(除非用--in-reply-to指定)。默认值是sendemail.thread配置值的值; 如果未指定,则默认为--thread。

用户需要确保在git send-email被要求添加 In-Reply-To 头时已经存在(特别是git format-patch可以配置为自己执行线程)。如果不这样做,可能无法在收件人的MUA中产生预期结果。

管理

--confirm=<mode>

在发送之前确认:

  • always 在发送之前会一直确认
  • never 发送前绝不会确认
  • cc 将在发送之前确认发送电子邮件已自动将补丁中的地址添加到Cc列表
  • compose 将在使用--compose时发送第一条消息之前进行确认。
  • auto相当于cc+compose

默认值是sendemail.confirm配置值的值; 如果未指定,则默认为auto除非指定了任何禁止选项,在这种情况下,默认值为compose

--dry-run

除了实际发送电子邮件之外,别做任何事

--no-format-patch

当参数可以理解为参考或文件名时,选择将其理解为format-patch参数(--format-patch)或文件名(--no-format-patch)。默认情况下,当发生这种冲突时,git send-email 将会失败。

--quiet

让 git-send-email 不那么冗长。每封电子邮件一行应该是输出的全部内容。

--no-validate

对补丁执行完整性检查。目前,验证意味着以下内容:

  • 调用 sendemail-validate 挂钩(如果存在)(请参阅 githooks [5])。
  • 警告包含超过998个字符的行; 这是由于 http://www.ietf.org/rfc/rfc2821.txt中描述的 SMTP 限制。

默认值是sendemail.validate; 的值。如果未设置,则默认为--validate

--force

发送电子邮件即使安全检查会阻止它。

信息

--dump-aliases

代替正常操作,从配置的别名文件中转储简写别名,每行按字母顺序排列一个。请注意,这只包含别名,不包括其扩展的电子邮件地址。查看sendemail.aliasesfile关于别名的更多信息。

组态

sendemail.aliasesFile

为避免输入长电子邮件地址,请将其指向一个或多个电子邮件别名文件。你还必须提供sendemail.aliasFileType

sendemail.aliasFileType

在 sendemail.aliasesFile 中指定的文件格式。必须是一muttmailrcpineelm其中之一,或gnus,或sendmail

在同一个名字的电子邮件程序的文档中可以找到每种格式的别名文件。标准格式的差异和局限性如下所述:

发送邮件 ( sendmail )

  • 引用的别名和引用地址不受支持:包含"符号的行将被忽略。
  • 不支持重定向到文件(/path/name)或管道(|command)。
  • 文件包含(:include: /path/name)不受支持。
  • 对于任何显式不支持的构造以及解析器无法识别的其他行,将在标准错误输出上显示警告。

sendemail.multiEdit

如果为 true(默认),则会生成单个编辑器实例以编辑您必须编辑的文件(使用补丁时--annotate,使用摘要时--compose)。如果为 false,则文件将依次编辑,每次产生一个新的编辑器。

sendemail.confirm

设置发送前是否确认的默认值。必须是alwaysnevercccompose,或auto其中之一。请参阅--confirm上一节中这些值的含义。

示例

使用 Gmail 作为 smtp 服务器

git send-email通过 GMail SMTP 服务器发送补丁,请编辑〜/ .gitconfig 指定您的帐户设置:

[sendemail]
        smtpEncryption = tls
        smtpServer = smtp.gmail.com
        smtpUser = yourname@gmail.com
        smtpServerPort = 587

如果您的 gmail 帐户有多因素身份验证设置,则需要生成特定于应用程序的密码以供使用git send-email。访问 https://security.google.com/settings/security/apppasswords 以设置应用专用密码。安装完成后,您可以使用凭据助手来存储它:

$ git credential fill
protocol=smtp
host=smtp.gmail.com
username=youname@gmail.com
password=app-password

一旦您的提交已准备好发送到邮件列表,请运行以下命令:

$ git format-patch --cover-letter -M origin/master -o outgoing/
$ edit outgoing/0000-*
$ git send-email outgoing/*

注意:需要以下 perl 模块 Net :: SMTP :: SSL,MIME :: Base64 和 Authen :: SASL