设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.51.1 → 2.53.0 无变更
-
2.51.0
2025-08-18
- 2.43.2 → 2.50.1 无更改
-
2.43.1
2024-02-09
-
2.43.0
2023-11-20
- 2.38.1 → 2.42.4 无更改
-
2.38.0
2022-10-02
- 2.29.1 → 2.37.7 无更改
-
2.29.0
2020-10-19
- 2.20.1 → 2.28.1 无变更
-
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.4.12 → 2.17.6 无变更
-
2.3.10
2015-09-28
-
2.2.3
2015-09-04
- 2.1.4 无更改
-
2.0.5
2014-12-17
描述
此命令将由 git format-patch 生成的邮箱文件上传到 IMAP 草稿文件夹。这使得在使用无法直接读取邮箱文件的邮件客户端时,可以像发送其他电子邮件一样发送补丁。该命令也适用于任何通用的邮箱文件,只要其中的电子邮件按顺序包含 From、Date 和 Subject 字段即可。
典型用法如下
$ git format-patch --signoff --stdout --attach origin | git imap-send
选项
- -v
- --verbose
-
显示详细信息。
- -q
- --quiet
-
静默模式。
- -f <folder>
- --folder=<folder>
-
指定保存电子邮件的文件夹。例如:
--folder=[Gmail]/Drafts或-fINBOX/Drafts。 - --curl
-
使用 libcurl 与 IMAP 服务器通信,除非正在使用隧道。如果 Git 在编译时未设置 USE_CURL_FOR_IMAP_SEND 选项,则此选项将被忽略。
- --no-curl
-
使用 Git 自有的 IMAP 例程而不是 libcurl 与 IMAP 服务器通信。如果 Git 在编译时设置了 NO_OPENSSL 选项,则此选项将被忽略。
- --list
-
运行 IMAP LIST 命令以输出所有现有文件夹的列表。
配置
要使用此工具,必须将 imap.folder 以及 imap.tunnel 或 imap.host 其中之一设置为合适的值。
本节中此行以上的所有内容均未包含在 git-config[1] 文档中。以下内容与该文档中的内容相同
- imap.folder
-
存放邮件的文件夹,通常是草稿箱(Drafts)。例如:
INBOX.Drafts、INBOX/Drafts或 [Gmail]/Drafts。必须指定要交互的 IMAP 文件夹;当未提供--folder选项时,该配置变量的值将作为备选默认值。 - imap.tunnel
-
用于建立通往 IMAP 服务器隧道的命令,命令将通过该隧道传输,而不是直接建立网络连接。当未设置 imap.host 时,此项是必需的。
- imap.host
-
标识服务器的 URL。对于非安全连接使用
imap://前缀,对于安全连接使用imaps://前缀。设置了 imap.tunnel 时此项会被忽略,否则是必需的。 - imap.user
-
登录服务器时使用的用户名。
- imap.pass
-
登录服务器时使用的密码。
- imap.port
-
连接服务器的整数端口号。imap:// 主机默认为 143,imaps:// 主机默认为 993。设置了 imap.tunnel 时此项会被忽略。
- imap.sslverify
-
布尔值,用于启用/禁用对 SSL/TLS 连接所使用的服务器证书的验证。默认为
true。设置了 imap.tunnel 时此项会被忽略。 - imap.preformattedHTML
-
布尔值,用于在发送补丁时启用/禁用 HTML 编码。经 HTML 编码的补丁将用 <pre> 标签包围,且内容类型为 text/html。讽刺的是,启用此选项会导致 Thunderbird 以 plain/text, format=fixed 的格式发送邮件。默认为
false。 - imap.authMethod
-
指定与 IMAP 服务器进行身份验证的方法。如果 Git 是在 NO_CURL 选项下编译的,或者您的 curl 版本早于 7.34.0,或者您在使用
--no-curl选项运行 git-imap-send,则仅支持PLAIN、CRAM-MD5、OAUTHBEARER和XOAUTH2。如果未设置,则gitimap-send使用基本的 IMAP 明文LOGIN命令。
获取可用文件夹列表
为了将电子邮件发送到特定文件夹,您需要知道邮箱中目标文件夹的正确名称。各种邮件客户端显示的“垃圾邮件”、“已删除邮件”等名称可能并非邮件服务商服务器上存储的实际名称。
为了获取用于 git imap-send 的正确文件夹名称,您可以运行 git imap-send --list。这将显示有效文件夹名称列表。以下是在 Gmail 帐户上运行时的输出示例:
* LIST (\HasNoChildren) "/" "INBOX" * LIST (\HasChildren \Noselect) "/" "[Gmail]" * LIST (\All \HasNoChildren) "/" "[Gmail]/All Mail" * LIST (\Drafts \HasNoChildren) "/" "[Gmail]/Drafts" * LIST (\HasNoChildren \Important) "/" "[Gmail]/Important" * LIST (\HasNoChildren \Sent) "/" "[Gmail]/Sent Mail" * LIST (\HasNoChildren \Junk) "/" "[Gmail]/Spam" * LIST (\Flagged \HasNoChildren) "/" "[Gmail]/Starred" * LIST (\HasNoChildren \Trash) "/" "[Gmail]/Trash"
在这里,您可以观察到“垃圾邮件”文件夹的正确名称是 [Gmail]/Spam,“已删除邮件”文件夹的正确名称是 [Gmail]/Trash。类似的逻辑也可以用来确定其他文件夹。
示例
使用隧道模式
[imap]
folder = "INBOX.Drafts"
tunnel = "ssh -q -C user@example.com /usr/bin/imapd ./Maildir 2> /dev/null"
使用直接模式
[imap]
folder = "INBOX.Drafts"
host = imap://imap.example.com
user = bob
pass = p4ssw0rd
使用带 SSL 的直接模式
[imap]
folder = "INBOX.Drafts"
host = imaps://imap.example.com
user = bob
pass = p4ssw0rd
port = 123
; sslVerify = false
|
注意
|
如果您怀疑无法连接的原因是私有服务器 example.com 的证书无法通过正确验证,您可能需要在排查故障时使用 sslVerify=false。 |
使用 Gmail 的 IMAP 接口
[imap]
folder = "[Gmail]/Drafts"
host = imaps://imap.gmail.com
user = user@gmail.com
port = 993
Gmail 不允许为 git imap-send 使用常规密码。如果您的 Gmail 帐户设置了多重身份验证,您可以生成一个应用专用密码以供 git imap-send 使用。访问 https://security.google.com/settings/security/apppasswords 来创建它。或者,使用下文所述的 OAuth2.0 身份验证。
|
注意
|
如果收到“Folder doesn’t exist(文件夹不存在)”的错误,您可能需要改用:folder = "[Google Mail]/Drafts"。您也可以运行 git imap-send --list 来获取可用文件夹列表。 |
|
注意
|
如果您的 Gmail 帐户设置为英语以外的其他语言,则“Drafts”文件夹的名称将被本地化。 |
如果您想使用基于 OAuth2.0 的身份验证,可以在配置中指定 OAUTHBEARER 或 XOAUTH2 机制。这比使用应用专用密码更安全,也不强制要求开启多重身份验证。使用此认证方式时,您需要使用 OAuth2.0 访问令牌(access token)代替密码。
[imap]
folder = "[Gmail]/Drafts"
host = imaps://imap.gmail.com
user = user@gmail.com
port = 993
authmethod = OAUTHBEARER
使用 Outlook 的 IMAP 接口
与 Gmail 不同,Outlook 仅支持基于 OAuth2.0 的身份验证。此外,它仅支持将 XOAUTH2 作为机制。
[imap]
folder = "Drafts"
host = imaps://outlook.office365.com
user = user@outlook.com
port = 993
authmethod = XOAUTH2
一旦提交准备好发送,请运行以下命令
$ git format-patch --cover-letter -M --stdout origin/master | git imap-send
请务必在邮件客户端中禁用自动换行(Gmail 的网页界面无论如何都会换行,因此您需要使用真正的 IMAP 客户端)。
如果您使用 OAuth2.0 身份验证,使用凭据助手(credential helpers)生成令牌会更方便。git-send-email[1] 中建议的凭据助手同样可以用于 git imap-send。
注意
确保邮件程序发送的电子邮件符合项目标准仍然是您的责任。许多项目不喜欢以附件形式发送补丁。某些邮件代理会以导致补丁失效的方式对补丁进行转换(例如:自动换行、以 format=flowed 格式发送)。如果您不检查这一点,将会收到愤怒的谴责和嘲讽。
已知 Thunderbird 尤其容易出问题。Thunderbird 用户可以访问此网页了解更多信息:https://kb.mozillazine.org/Plain_text_e-mail_-_Thunderbird#Completely_plain_email
另请参阅
git-format-patch[1], git-send-email[1], mbox(5)