设置和配置
获取和创建项目
基本快照
分支和合并
共享和更新项目
检查和比较
打补丁
调试
邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.47.1 → 2.49.0 没有更改
-
2.47.0
2024-10-06
- 2.45.1 → 2.46.3 没有更改
-
2.45.0
2024-04-29
- 2.44.1 → 2.44.3 没有更改
-
2.44.0
2024-02-23
- 2.43.2 → 2.43.6 没有更改
-
2.43.1
2024-02-09
-
2.43.0
2023-11-20
- 2.41.1 → 2.42.4 没有更改
-
2.41.0
2023-06-01
- 2.39.1 → 2.40.4 没有更改
-
2.39.0
2022-12-12
- 2.38.1 → 2.38.5 没有更改
-
2.38.0
2022-10-02
- 2.35.1 → 2.37.7 没有更改
-
2.35.0
2022-01-24
- 2.33.1 → 2.34.8 没有更改
-
2.33.0
2021-08-16
- 2.30.2 → 2.32.7 没有更改
-
2.30.1
2021-02-08
-
2.30.0
2020-12-27
- 2.24.1 → 2.29.3 没有更改
-
2.24.0
2019-11-04
- 2.23.1 → 2.23.4 没有更改
-
2.23.0
2019-08-16
- 2.22.2 → 2.22.5 没有更改
-
2.22.1
2019-08-11
- 2.21.1 → 2.22.0 没有更改
-
2.21.0
2019-02-24
- 2.20.1 → 2.20.5 没有更改
-
2.20.0
2018-12-09
- 2.19.1 → 2.19.6 没有更改
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 没有更改
-
2.18.0
2018-06-21
- 2.17.1 → 2.17.6 没有更改
-
2.17.0
2018-04-02
-
2.16.6
2019-12-06
- 2.15.4 没有更改
-
2.14.6
2019-12-06
- 2.13.7 没有更改
-
2.12.5
2017-09-22
- 2.10.5 → 2.11.4 没有更改
-
2.9.5
2017-07-30
- 2.8.6 没有更改
-
2.7.6
2017-07-30
-
2.6.7
2017-05-05
-
2.5.6
2017-05-05
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
- 2.2.3 没有更改
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
概要
git send-email [<options>] (<file>|<directory>)… git send-email [<options>] <format-patch-options> git send-email --dump-aliases git send-email --translate-aliases
描述
获取命令行上给出的补丁并将其通过电子邮件发送出去。补丁可以指定为文件、目录(将发送目录中的所有文件)或直接作为修订列表。在最后一种情况下,git-format-patch[1] 接受的任何格式都可以传递给 git send-email,以及 git-format-patch[1] 理解的选项。
电子邮件的标头可以通过命令行选项配置。如果在命令行上未指定,将提示用户使用 ReadLine 启用的界面来提供必要的信息。
补丁文件接受两种格式
-
mbox 格式文件
这是 git-format-patch[1] 生成的内容。大多数标头和 MIME 格式将被忽略。
-
Greg Kroah-Hartman 的 send_lots_of_email.pl 脚本使用的原始格式
此格式期望文件的第一行包含 "Cc:" 值,第二行包含消息的 "Subject:"。
选项
撰写
- --annotate
-
查看并编辑即将发送的每个补丁。默认为
sendemail.annotate
的值。有关sendemail.multiEdit
,请参阅配置部分。 - --bcc=<地址>,…
-
为每封电子邮件指定 "Bcc:" 值。默认为
sendemail.bcc
的值。此选项可以指定多次。
- --cc=<地址>,…
-
为每封电子邮件指定起始 "Cc:" 值。默认为
sendemail.cc
的值。此选项可以指定多次。
- --compose
-
调用文本编辑器(请参阅 git-var[1] 中的 GIT_EDITOR)来编辑补丁系列的介绍性消息。
当使用
--compose
时,git send-email 将使用消息中指定的 From、To、Cc、Bcc、Subject、Reply-To 和 In-Reply-To 标头。如果消息正文(在标头和空行之后键入的内容)仅包含空白(或 Git: 前缀的)行,则不会发送摘要,但将使用上面提到的标头,除非它们被删除。将提示输入缺失的 From 或 In-Reply-To 标头。
有关
sendemail.multiEdit
,请参阅配置部分。 - --from=<地址>
-
指定电子邮件的发送者。如果在命令行上未指定,则使用
sendemail.from
配置选项的值。如果命令行选项和sendemail.from
均未设置,则将提示用户输入该值。提示的默认值为 GIT_AUTHOR_IDENT,如果未设置,则为 GIT_COMMITTER_IDENT,由 "git var -l" 返回。 - --reply-to=<地址>
-
指定收件人回复应发送到的地址。如果消息的回复应发送到与 --from 参数指定的地址不同的地址,请使用此选项。
- --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=<字符串>
-
指定电子邮件线程的初始主题。仅在也设置了 --compose 时才需要。如果未设置 --compose,则会提示输入。
- --to=<地址>,…
-
指定生成的电子邮件的主要收件人。通常,这将是相关项目的上游维护者。默认为
sendemail.to
配置选项的值;如果未指定,并且未指定 --to-cmd,则会提示输入。此选项可以指定多次。
- --8bit-encoding=<编码>
-
当遇到未声明其编码的非 ASCII 消息或主题时,添加标头/引用以指示它以 <编码> 编码。默认为 sendemail.assume8bitEncoding 的值;如果未指定,如果遇到任何非 ASCII 文件,则会提示输入。
请注意,不会尝试验证编码。
- --compose-encoding=<编码>
-
指定撰写消息的编码。默认为 sendemail.composeEncoding 的值;如果未指定,则假定为 UTF-8。
- --transfer-encoding=(7bit|8bit|quoted-printable|base64|auto)
-
指定用于通过 SMTP 发送消息的传输编码。遇到非 ASCII 消息时,7bit 将失败。当存储库包含包含回车符的文件时,quoted-printable 很有用,但使得手动检查原始补丁电子邮件文件(从 MUA 保存的)更加困难。base64 更加万无一失,但同时也更加不透明。auto 将尽可能使用 8bit,否则使用 quoted-printable。
默认为
sendemail.transferEncoding
配置选项的值;如果未指定,则默认为auto
。 - --xmailer
- --no-xmailer
-
添加(或阻止添加)"X-Mailer:" 标头。默认情况下,会添加该标头,但可以通过将
sendemail.xmailer
配置变量设置为false
来关闭它。
发送
- --envelope-sender=<地址>
-
指定用于发送电子邮件的信封发件人。如果你的默认地址不是订阅列表的地址,这将很有用。为了使用 From 地址,请将该值设置为 "auto"。如果使用 sendmail 二进制文件,则必须具有 -f 参数的适当权限。默认为
sendemail.envelopeSender
配置变量的值;如果未指定,则选择信封发件人留给你的 MTA。 - --sendmail-cmd=<命令>
-
指定要运行以发送电子邮件的命令。该命令应类似于 sendmail;具体来说,它必须支持
-i
选项。如有必要,将在 shell 中执行该命令。默认为sendemail.sendmailCmd
的值。如果未指定,并且也未指定 --smtp-server,则 git-send-email 将在/usr/sbin
、/usr/lib
和 $PATH 中搜索sendmail
。 - --smtp-encryption=<加密>
-
指定 SMTP 连接的加密方式。有效值包括 ssl 和 tls。任何其他值都将恢复为纯文本(未加密)的 SMTP,默认端口为 25。虽然名称不同,但两个值都将使用相同的新版 TLS,只是出于历史原因保留了这些名称。ssl 指的是“隐式”加密(有时称为 SMTPS),默认使用端口 465。tls 指的是“显式”加密(通常称为 STARTTLS),默认使用端口 25。SMTP 服务器可能使用其他端口,这些端口不是默认端口。常见的 tls 和未加密的替代端口是 587。您需要查阅提供商的文档或服务器配置,以确保适用于您的情况。默认值为
sendemail.smtpEncryption
的值。 - --smtp-domain=<FQDN>
-
指定在 HELO/EHLO 命令中发送到 SMTP 服务器的完全限定域名 (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 库支持的所有机制。可以指定特殊值 none 来完全禁用身份验证,而与--smtp-user
无关。 - --smtp-pass[=<password>]
-
SMTP-AUTH 的密码。该参数是可选的:如果未指定参数,则将空字符串用作密码。默认值为
sendemail.smtpPass
的值,但--smtp-pass
始终会覆盖此值。此外,密码无需在配置文件或命令行中指定。如果已指定用户名(使用
--smtp-user
或sendemail.smtpUser
),但未指定密码(使用--smtp-pass
或sendemail.smtpPass
),则将使用 git-credential 获取密码。 - --no-smtp-auth
-
禁用 SMTP 身份验证。是
--smtp-auth=none
的简写。 - --smtp-server=<host>
-
如果设置,指定要使用的外发 SMTP 服务器(例如,
smtp.example.com
或原始 IP 地址)。如果未指定,并且也未指定--sendmail-cmd
,则默认情况下,将在/usr/sbin
、/usr/lib
和 $PATH 中搜索sendmail
,如果存在这样的程序,则使用它,否则回退到localhost
。为了向后兼容,此选项也可以指定类似 sendmail 程序的完整路径名;该程序必须支持
-i
选项。此方法不支持传递参数或使用纯命令名称。对于这些用例,请考虑改用--sendmail-cmd
。 - --smtp-server-port=<port>
-
指定与默认端口不同的端口(SMTP 服务器通常侦听 smtp 端口 25,但也可能侦听提交端口 587 或常见的 SSL smtp 端口 465);也接受符号端口名称(例如,“submission”而不是 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)。将其设置为空字符串以禁用证书验证。默认为
sendemail.smtpSSLCertPath
配置变量的值(如果已设置),否则默认为底层 SSL 库的内置默认值(这应该是大多数平台上最佳选择)。 - --smtp-user=<user>
-
SMTP-AUTH 的用户名。默认值为
sendemail.smtpUser
的值;如果未指定用户名(使用--smtp-user
或sendemail.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
配置变量的值。
自动化
- --no-to
- --no-cc
- --no-bcc
-
清除先前通过配置设置的任何“To:”、“Cc:”、“Bcc:”地址列表。
- --no-identity
-
清除先前读取的通过配置设置的
sendemail.identity
值(如果有)。 - --to-cmd=<command>
-
指定每个补丁文件执行一次的命令,该命令应生成特定于补丁文件的“To:”条目。此命令的输出必须是每行一个电子邮件地址。默认值为 sendemail.toCmd 配置值。
- --cc-cmd=<command>
-
指定每个补丁文件执行一次的命令,该命令应生成特定于补丁文件的“Cc:”条目。此命令的输出必须是每行一个电子邮件地址。默认值为
sendemail.ccCmd
配置值。 - --header-cmd=<command>
-
指定为每条外发消息执行一次的命令,并输出要插入其中的 RFC 2822 样式标头行。设置
sendemail.headerCmd
配置变量时,始终使用其值。在命令行中提供 --header-cmd 时,其值优先于sendemail.headerCmd
配置变量。 - --no-header-cmd
-
禁用任何正在使用的标头命令。
- --[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: 行中找到的电子邮件添加到抄送列表。默认值为sendemail.signedOffByCc
配置值;如果未指定该值,则默认为 --signed-off-by-cc。 - --[no-]cc-cover
-
如果设置此项,则会将系列中第一个补丁(通常是封面信)中的 Cc: 标头中找到的电子邮件添加到每个电子邮件设置的抄送列表。默认值为 sendemail.ccCover 配置值;如果未指定该值,则默认为 --no-cc-cover。
- --[no-]to-cover
-
如果设置此项,则会将系列中第一个补丁(通常是封面信)中的 To: 标头中找到的电子邮件添加到每个电子邮件设置的收件人列表。默认值为 sendemail.toCover 配置值;如果未指定该值,则默认为 --no-to-cover。
- --suppress-cc=<category>
-
指定要抑制自动抄送的收件人类别的附加类别
-
author 将避免包含补丁作者。
-
self 将避免包含发件人。
-
cc 将避免包含补丁标头中 Cc 行中提到的任何人,但 self 除外(为此使用 self)。
-
bodycc 将避免包含补丁正文(提交消息)中 Cc 行中提到的任何人,但 self 除外(为此使用 self)。
-
sob 将避免包含 Signed-off-by 尾部中提到的任何人,但 self 除外(为此使用 self)。
-
misc-by 将避免包含 Acked-by、Reviewed-by、Tested-by 以及补丁正文中其他“-by”行中提到的任何人,但 Signed-off-by 除外(为此使用 sob)。
-
cccmd 将避免运行 --cc-cmd。
-
body 等效于 sob + bodycc + misc-by。
-
all 将抑制所有自动抄送值。
默认值为
sendemail.suppressCc
配置值;如果未指定该值,如果指定了 --suppress-from,则默认为 self,如果指定了 --no-signed-off-cc,则默认为 body。 -
- --[no-]suppress-from
-
如果设置此项,则不要将 From: 地址添加到 cc: 列表。默认值为
sendemail.suppressFrom
配置值;如果未指定该值,则默认为 --no-suppress-from。 - --[no-]thread
-
如果设置了此选项,则每个发送的邮件都会添加 In-Reply-To 和 References 标头。邮件是引用前一封邮件(根据 git format-patch 的说法是
deep
线程),还是引用第一封邮件(shallow
线程),由 "--[no-]chain-reply-to" 控制。如果使用 "--no-thread" 禁用,则不会添加这些标头(除非使用 --in-reply-to 指定)。默认值为
sendemail.thread
配置值;如果未指定,则默认为 --thread。用户有责任确保在要求 git send-email 添加 In-Reply-To 标头时,该标头尚不存在(尤其要注意 git format-patch 可以配置为自己进行线程处理)。否则,可能会在收件人的 MUA 中产生意想不到的结果。
- --[no-]mailmap
-
使用 mailmap 文件(参见 gitmailmap[5])将所有地址映射到其规范的真实姓名和电子邮件地址。可以使用
sendemail.mailmap.file
或sendemail.mailmap.blob
配置值提供特定于 git-send-email 的其他 mailmap 数据。默认为sendemail.mailmap
。
管理
- --confirm=<mode>
-
在发送前确认
-
always 将始终在发送前确认
-
never 将永远不会在发送前确认
-
cc 将在 send-email 自动将补丁中的地址添加到 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 个字符的行的补丁,除非使用合适的传输编码(auto、base64 或 quoted-printable);这是由于 https://www.ietf.org/rfc/rfc5322.txt 中描述的 SMTP 限制。
默认值为
sendemail.validate
;如果未设置,则默认为--validate
。 -
- --force
-
即使安全检查会阻止发送电子邮件,也强制发送。
配置
此部分中此行下面的所有内容都是从 git-config[1] 文档中有选择地包含的。内容与那里找到的相同
- sendemail.identity
-
配置标识。给出后,会导致 sendemail.<identity> 子部分中的值优先于 sendemail 部分中的值。默认标识是
sendemail.identity
的值。 - sendemail.smtpEncryption
-
参见 git-send-email[1] 获取说明。请注意,此设置不受 identity 机制的约束。
- sendemail.smtpSSLCertPath
-
ca-certificates 的路径(可以是目录或单个文件)。将其设置为空字符串以禁用证书验证。
- sendemail.<identity>.*
-
下面找到的 sendemail.* 参数的特定于身份的版本,当通过命令行或
sendemail.identity
选择此身份时,这些参数优先于其他参数。 - sendemail.multiEdit
-
如果为 true(默认值),则会生成一个编辑器实例来编辑您必须编辑的文件(使用
--annotate
时的补丁,以及使用--compose
时的摘要)。如果为 false,则将一个接一个地编辑文件,每次生成一个新的编辑器。 - sendemail.confirm
-
设置发送前是否确认的默认值。必须是 always、never、cc、compose 或 auto 之一。有关这些值的含义,请参见 git-send-email[1] 文档中的
--confirm
。 - sendemail.mailmap
-
如果为 true,则使 git-send-email[1] 假定
--mailmap
,否则假定--no-mailmap
。默认为 False。 - sendemail.mailmap.file
-
git-send-email[1] 特定的增强 mailmap 文件的位置。首先加载默认 mailmap 和
mailmap.file
。因此,此文件中的条目优先于默认 mailmap 位置中的条目。参见 gitmailmap[5]。 - sendemail.mailmap.blob
-
类似于
sendemail.mailmap.file
,但将该值视为对存储库中 blob 的引用。sendemail.mailmap.file
中的条目优先于此处的条目。参见 gitmailmap[5]。 - sendemail.aliasesFile
-
为避免键入长电子邮件地址,请将其指向一个或多个电子邮件别名文件。您还必须提供
sendemail.aliasFileType
。 - sendemail.aliasFileType
-
sendemail.aliasesFile 中指定的文件格式。必须是 mutt、mailrc、pine、elm、gnus 或 sendmail 之一。
可以在同名电子邮件程序的文档中找到每种格式的别名文件的外观。下面描述了与标准格式的差异和限制
- sendemail.annotate
- sendemail.bcc
- sendemail.cc
- sendemail.ccCmd
- sendemail.chainReplyTo
- sendemail.envelopeSender
- sendemail.from
- sendemail.headerCmd
- sendemail.signedOffByCc
- sendemail.smtpPass
- sendemail.suppressCc
- sendemail.suppressFrom
- sendemail.to
- sendemail.toCmd
- sendemail.smtpDomain
- sendemail.smtpServer
- sendemail.smtpServerPort
- sendemail.smtpServerOption
- sendemail.smtpUser
- sendemail.thread
- sendemail.transferEncoding
- sendemail.validate
- sendemail.xmailer
-
这些配置变量都为 git-send-email[1] 命令行选项提供了一个默认值。有关详细信息,请参见其文档。
- sendemail.signedOffCc (已弃用)
-
sendemail.signedOffByCc
的已弃用别名。 - sendemail.smtpBatchSize
-
每个连接要发送的消息数量,之后将发生重新登录。如果值为 0 或未定义,则在一个连接中发送所有消息。另请参见 git-send-email[1] 的
--batch-size
选项。 - sendemail.smtpReloginDelay
-
重新连接到 smtp 服务器之前要等待的秒数。另请参见 git-send-email[1] 的
--relogin-delay
选项。 - sendemail.forbidSendmailVariables
-
为了避免常见的错误配置,如果存在任何“sendmail”的配置选项,git-send-email[1] 将中止并发出警告。设置此变量以绕过检查。
示例
使用 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 format-patch --cover-letter -M origin/master -o outgoing/ $ edit outgoing/0000-* $ git send-email outgoing/*
第一次运行它时,系统将提示您输入凭据。根据需要输入特定于应用程序的密码或您的常规密码。如果您已配置凭据助手(参见 git-credential[1]),密码将保存在凭据存储中,因此您下次无需键入它。
注意:需要使用您的 Perl 发行版安装的以下核心 Perl 模块:MIME::Base64、MIME::QuotedPrint、Net::Domain 和 Net::SMTP。还需要这些额外的 Perl 模块:Authen::SASL 和 Mail::Address。
参见
git-format-patch[1], git-imap-send[1], mbox(5)
GIT
属于 git[1] 套件的一部分