設定與組態
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢查與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
- gitattributes
- 命令列介面規範
- Git 日常使用
- 常見問題 (FAQ)
- 詞彙表
- 掛鉤 (Hooks)
- gitignore
- gitmodules
- 修訂版本 (Revisions)
- 子模組
- 教學
- 工作流程
- 所有指南...
管理
底層命令 (Plumbing Commands)
-
2.55.0
2026-06-29
-
2.54.0
2026-04-20
-
2.53.0
2026-02-02
-
2.52.0
2025-11-17
- 2.51.2 無變更
-
2.51.1
2025-10-15
-
2.51.0
2025-08-18
- 2.50.1 無變更
-
2.50.0
2025-06-16
- 2.47.1 → 2.49.1 無變更
-
2.47.0
2024-10-06
- 2.45.1 → 2.46.4 無變更
-
2.45.0
2024-04-29
- 2.44.1 → 2.44.4 無變改
-
2.44.0
2024-02-23
- 2.43.2 → 2.43.7 無變更
-
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-format-patch[1] 能理解的選項,都可以傳遞給 git send-email。
電子郵件的標頭可透過命令列選項進行設定。如果未在命令列中指定,系統將提示使用者透過啟用 ReadLine 的介面提供必要的資訊。
修補程式檔案接受兩種格式
-
mbox 格式檔案
這是 git-format-patch[1] 所產生的格式。大多數標頭和 MIME 格式都會被忽略。
-
Greg Kroah-Hartman 的
send_lots_of_email.pl指令碼所使用的原始格式此格式要求檔案的第一行包含
Cc:值,第二行包含訊息的Subject:(主旨)。
選項
撰寫
- --annotate
-
在寄送前審閱並編輯每個修補程式。預設值為
sendemail.annotate的值。請參閱 CONFIGURATION 區段中的sendemail.multiEdit。 - --bcc=<address>,…
-
為每封電子郵件指定
Bcc:值。預設值為sendemail.bcc的值。此選項可以多次指定。
- --cc=<address>,…
-
為每封電子郵件指定初始
Cc:值。預設值為sendemail.cc的值。此選項可以多次指定。
- --compose
-
呼叫文字編輯器(參閱 git-var[1] 中的 GIT_EDITOR)來編輯修補程式系列的介紹訊息。
當使用
--compose時,gitsend-email將會使用訊息中指定的From、To、Cc、Bcc、Subject、Reply-To以及In-Reply-To標頭。如果訊息本文(標頭與空行之後輸入的內容)僅包含空白行(或以Git:開頭的行),則摘要將不會被寄出,但上述標頭仍會被使用(除非已被刪除)。如果缺少
From或In-Reply-To標頭,系統將會提示輸入。請參閱 CONFIGURATION 區段中的
sendemail.multiEdit。 - --from=<address>
-
指定電子郵件的寄件者。若未在命令列指定,則使用
sendemail.from設定選項的值。如果命令列選項與sendemail.from皆未設定,則系統將提示使用者輸入該值。提示的預設值將是GIT_AUTHOR_IDENT的值,若未設定則為GIT_COMMITTER_IDENT的值,如同gitvar-l所傳回的內容。 - --reply-to=<address>
-
指定收件者回覆時應寄送到的地址。如果回覆訊息的目的地應與
--from參數指定的地址不同,請使用此參數。 - --in-reply-to=<identifier>
-
使第一封郵件(或所有使用
--no-thread的郵件)顯示為給定 Message-ID 的回覆,以避免因提供新的修補程式系列而中斷討論串。第二封及之後的電子郵件將根據--[no-]chain-reply-to設定作為回覆寄出。例如,當指定
--thread和--no-chain-reply-to時,第二封及後續修補程式將會是第一封的回覆,如下圖所示,其中 [PATCHv20/3] 是對 [PATCH0/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,系統將會提示輸入。 - --outlook-id-fix
- --no-outlook-id-fix
-
Microsoft Outlook SMTP 伺服器會丟棄電子郵件中傳送的 Message-ID 並指派一個新的隨機 Message-ID,從而破壞討論串。
使用
--outlook-id-fix時,gitsend-email會使用 Outlook 伺服器專用的機制來獲取伺服器所指派的 Message-ID 以修復討論串。僅在您確認該伺服器回報重新改寫後的 Message-ID 的方式與 Outlook 伺服器相同時,才使用此功能。若未指定此選項,在與 smtp.office365.com 或 smtp-mail.outlook.com 通訊時,預設會執行此修復。使用
--no-outlook-id-fix即使與上述兩個伺服器通訊時也能停用該功能。 - --subject=<string>
-
指定電子郵件討論串的初始主旨。僅在同時設定了
--compose時才需要。如果未設定--compose,系統將會提示輸入。 - --to=<address>,…
-
指定所產生電子郵件的主要收件者。通常這會是該專案的上游維護者。預設值為
sendemail.to設定的值;若未指定且未指定--to-cmd,系統將會提示輸入。此選項可以多次指定。
- --8bit-encoding=<encoding>
-
當遇到非 ASCII 訊息或主旨且未宣告其編碼時,添加標頭/引號以指出它以 <encoding> 編碼。預設值為
sendemail.assume8bitEncoding的值;若未指定,則在遇到任何非 ASCII 檔案時會提示輸入。請注意,系統不會進行任何驗證編碼的嘗試。
- --compose-encoding=<encoding>
-
指定撰寫訊息的編碼。預設值為
sendemail.composeEncoding的值;若未指定,則預設為 UTF-8。 - --transfer-encoding=(7bit|8bit|quoted-printable|base64|auto)
-
指定透過 SMTP 寄送訊息時使用的傳輸編碼。
7bit在遇到非 ASCII 訊息時會失敗。quoted-printable在儲存庫包含含有歸位字元的檔案時很有用,但會使原始修補程式電子郵件檔案(從郵件客戶端儲存時)更難手動檢視。base64雖然更保險,但也更不透明。auto會在可能時使用8bit,否則使用quoted-printable。預設值為
sendemail.transferEncoding設定的值;若未指定,預設為auto。 - --xmailer
- --no-xmailer
-
添加(或防止添加)
X-Mailer:標頭。預設會添加該標頭,但可以透過將sendemail.xmailer設定變數設為false來關閉。
寄送
- --envelope-sender=<address>
-
指定寄送電子郵件時使用的信封寄件者 (Envelope Sender)。如果您的預設地址不是訂閱清單的地址,這會很有用。為了使用
From地址,請將值設為auto。如果您使用sendmail二進位檔案,您必須擁有-f參數的適當權限。預設值為sendemail.envelopeSender設定變數的值;若未指定,選擇信封寄件者的工作將由您的 MTA 決定。 - --sendmail-cmd=<command>
-
指定寄送電子郵件時執行的命令。該命令應類比 sendmail;具體來說,它必須支援
-i選項。如有必要,該命令將在 shell 中執行。預設值為sendemail.sendmailCmd的值。若未指定,且未指定--smtp-server,gitsend-email將在/usr/sbin、/usr/lib和$PATH中搜尋sendmail。 - --smtp-encryption=<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 位址相符。若未設定,
gitsend-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[1] 取得密碼。 - --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-encryptionssl的舊式別名。 - --smtp-ssl-cert-path <path>
-
用於 SMTP SSL/TLS 憑證驗證的可信 CA 憑證儲存路徑(可以是已由
c_rehash處理過的目錄,或是包含一個或多個 PEM 格式憑證的單一檔案:關於這些選項的更多資訊,請參閱 https://docs.openssl.org/master/man1/openssl-verify/ [OpenSSL 的 verify(1) 手冊頁] 中-CAfile<file> 和-CApath<dir> 選項的說明)。將其設為空字串即可停用憑證驗證。預設值為sendemail.smtpSSLCertPath設定變數的值(若已設定),否則為後端 SSL 程式庫編譯時的預設值(這在大多數平台上應該是最佳選擇)。 - --smtp-ssl-client-cert <path>
-
若伺服器要求,需提供用戶端憑證檔案的路徑。當伺服器設定為驗證用戶端憑證時,此選項為必要。如果檔案中未包含對應的私密金鑰,則必須使用
sendemail.smtpSSLClientKey設定變數或--smtp-ssl-client-key選項提供。預設值為sendemail.smtpSSLClientCert設定變數的值(若已設定)。 - --smtp-ssl-client-key <path>
-
對應於用戶端憑證的用戶端私密金鑰檔案路徑。為避免設定錯誤,此選項必須與
sendemail.smtpSSLClientKey設定變數或--smtp-ssl-client-cert選項結合使用。如果客戶端金鑰已包含在客戶端憑證中,則私密金鑰的選擇取決於憑證的格式。請造訪 https://metacpan.org/pod/IO::Socket::SSL 以獲取更多詳細資訊。預設值為sendemail.smtpSSLClientKey設定變數的值(若已設定)。 - --smtp-user=<user>
-
SMTP-AUTH 的使用者名稱。預設值為
sendemail.smtpUser的值;若未指定使用者名稱(透過--smtp-user或sendemail.smtpUser),則不會嘗試進行身份驗證。 - --smtp-debug=(0|1)
-
啟用 (1) 或停用 (0) 偵錯輸出。如果啟用,SMTP 命令與回覆將會被列印。有助於偵錯 TLS 連線與身份驗證問題。
- --imap-sent-folder=<folder>
-
某些電子郵件提供者(例如 iCloud)不會將使用 SMTP 寄送的電子郵件副本傳送到您信箱中的
Sent資料夾或類似位置。請使用此選項利用gitimap-send將電子郵件副本寄送到此選項指定的資料夾。您可以執行gitimap-send--list來取得有效資料夾名稱的列表,包含您信箱中正確的Sent資料夾名稱。您也可以使用此選項將電子郵件寄送到您選擇的指定 IMAP 資料夾。此功能需要設定
gitimap-send。相關說明請參閱 git-imap-send[1]。 - --use-imap-only
- --no-use-imap-only
-
如果設定此項,所有電子郵件將僅複製到使用
--imap-sent-folder或sendemail.imapSentFolder指定的 IMAP 資料夾,而不會寄送給收件者。如果您只是想建立電子郵件草稿並使用其他電子郵件客戶端來寄送,這會很有用。若使用--no-use-imap-only停用,電子郵件將如常寄送。預設為停用,但可以使用sendemail.useImapOnly設定變數來啟用。此功能需要設定
gitimap-send。相關說明請參閱 git-imap-send[1]。 - --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
-
停用任何正在使用的標頭命令。
- --chain-reply-to
- --no-chain-reply-to
-
如果設定此項,每封電子郵件都將作為前一封寄出郵件的回覆寄出。若使用
--no-chain-reply-to停用,則除了第一封以外的所有郵件都將作為對第一封寄出郵件的回覆寄出。使用此功能時,建議提供的第一個檔案應為整個修補程式系列的概覽。預設為停用,但可以使用sendemail.chainReplyTo設定變數來啟用。 - --identity=<identity>
-
設定身份。提供時,會使
sendemail.<identity> 小節中的值優先於sendemail小節中的值。預設身份為sendemail.identity的值。 - --signed-off-by-cc
- --no-signed-off-by-cc
-
如果設定此項,將在
Signed-off-by尾部或Cc:行中找到的電子郵件新增至 cc 列表。預設值為sendemail.signedOffByCc設定值;若未指定,則預設為--signed-off-by-cc。 - --cc-cover
- --no-cc-cover
-
如果設定此項,系列中第一個修補程式(通常是封面信)的
Cc:標頭中找到的電子郵件將新增至每封郵件的 cc 列表。預設值為sendemail.ccCover設定值;若未指定,則預設為--no-cc-cover。 - --to-cover
- --no-to-cover
-
如果設定此項,系列中第一個修補程式(通常是封面信)的
To:標頭中找到的電子郵件將新增至每封郵件的 to 列表。預設值為sendemail.toCover設定值;若未指定,則預設為--no-to-cover。 - --suppress-cc=<category>
-
指定要取消自動抄送的額外收件者類別
-
author將避免包含修補程式作者。 -
self將避免包含寄件者本人。 -
cc將避免包含修補程式標頭中 Cc 行提到的任何人(自身除外,請使用self)。 -
bodycc將避免包含修補程式內文(提交訊息)中 Cc 行提到的任何人(自身除外,請使用self)。 -
sob將避免包含 Signed-off-by 尾部中提到的任何人(自身除外,請使用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-by-cc時預設為body。 -
- --suppress-from
- --no-suppress-from
-
如果設定此項,請勿將
From:地址新增至Cc:列表。預設值為sendemail.suppressFrom設定值;若未指定,則預設為--no-suppress-from。 - --thread
- --no-thread
-
如果設定此項,
In-Reply-To和References標頭將新增至每封寄出的電子郵件。每封郵件是指向上一封郵件(根據gitformat-patch的措辭,稱為deep串列)還是指向第一封郵件(稱為shallow串列),由--[no-]chain-reply-to決定。若使用
--no-thread停用,這些標頭將不會新增(除非使用--in-reply-to指定)。預設值為sendemail.thread設定值;若未指定,則預設為--thread。使用者需自行確保在要求
gitsend-email添加 In-Reply-To 標頭時,該標頭尚未存在(特別請注意gitformat-patch本身可以設定為執行串列)。否則,結果可能不會符合收件者郵件客戶端的預期。 - --mailmap
- --no-mailmap
-
使用 mailmap 檔案(參閱 gitmailmap[5])將所有地址映射為其規範的真實姓名與電子郵件地址。專用於
gitsend-email的額外 mailmap 資料可以使用sendemail.mailmap.file或sendemail.mailmap.blob設定值提供。預設為sendemail.mailmap。
管理
- --confirm=<mode>
-
在寄送前進行確認
-
always將總是在寄送前進行確認。 -
never將從不在寄送前進行確認。 -
cc將在 send-email 已自動從修補程式新增地址到 Cc 列表時,於寄送前確認。 -
compose將在使用 --compose 時,於寄送第一封訊息前確認。 -
auto等同於cc+compose。
預設值為
sendemail.confirm設定值;若未指定,則預設為auto,除非指定了任何抑制選項,在這種情況下預設為compose。 -
- --dry-run
-
執行除實際寄送電子郵件以外的所有操作。
- --format-patch
- --no-format-patch
-
當參數可能同時被理解為參考或檔名時,選擇將其理解為 format-patch 參數 (
--format-patch) 或檔名 (--no-format-patch)。預設情況下,當發生這種衝突時,gitsend-email將會失敗。 - --quiet
-
使
gitsend-email輸出較少的資訊。應僅輸出每封郵件一行。 - --validate
- --no-validate
-
對修補程式執行合理性檢查。目前,驗證代表以下內容
-
呼叫 sendemail-validate 掛鉤(若存在,參閱 githooks[5])。
-
針對包含長度超過 998 個字元行的修補程式發出警告,除非使用適當的傳輸編碼(
auto、base64或quoted-printable);這是由於 https://www.ietf.org/rfc/rfc5322.txt 所描述的 SMTP 限制。
預設值為
sendemail.validate的值;若未設定,則預設為--validate。 -
- --force
-
即使安全檢查會阻止,仍要寄送電子郵件。
組態設定 (CONFIGURATION)
本節中此行以下的內容是從 git-config[1] 文件中選擇性包含的。內容與該處找到的內容相同
- sendemail.identity
-
設定身份。提供時,會使
sendemail.<identity> 小節中的值優先於sendemail小節中的值。預設身份為sendemail.identity的值。 - sendemail.smtpEncryption
-
請參閱 git-send-email[1] 以取得說明。請注意,此設定不受
identity機制限制。 - sendemail.smtpSSLCertPath
-
ca-certificates 的路徑(目錄或單一檔案)。將其設為空字串以停用憑證驗證。
- sendemail.smtpSSLClientCert
-
若伺服器要求,需提供用戶端憑證檔案的路徑。當伺服器設定為驗證用戶端憑證時,此為必要。如果檔案中未包含對應的私密金鑰,則必須使用
sendemail.smtpSSLClientKey或--smtp-ssl-client-key選項提供。 - sendemail.smtpSSLClientKey
-
對應於用戶端憑證的用戶端私密金鑰檔案路徑。為避免設定錯誤,此設定必須與
sendemail.smtpSSLClientCert或--smtp-ssl-client-cert選項結合使用。如果客戶端金鑰已包含在客戶端憑證中,則私密金鑰的選擇取決於憑證的格式。請造訪 https://metacpan.org/pod/IO::Socket::SSL 以獲取更多詳細資訊。 - 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.imapSentFolder
- sendemail.useImapOnly
- sendemail.thread
- sendemail.transferEncoding
- sendemail.validate
- sendemail.xmailer
-
這些設定變數皆提供 git-send-email[1] 命令列選項的預設值。詳細資訊請參閱其文件。
- sendemail.outlookidfix
-
如果為
true,使 git-send-email[1] 預設啟用--outlook-id-fix,如果為false則預設啟用--no-outlook-id-fix。若未指定,其行為將與未指定--outlook-id-fix時相同。 - 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] 將會終止並發出警告。設定此變數以略過該檢查。
SMTP 伺服器範例
使用 Gmail 作為 SMTP 伺服器
若要使用 git send-email 透過 Gmail SMTP 伺服器寄送修補程式,請編輯 ~/.gitconfig 以指定您的帳號設定
[sendemail] smtpEncryption = ssl smtpServer = smtp.gmail.com smtpUser = yourname@gmail.com smtpServerPort = 465
Gmail 不允許在 git send-email 中使用您的常規密碼。如果您在 Gmail 帳號上設定了雙重驗證,您可以產生一個應用程式專用密碼以用於 git send-email。請造訪 https://security.google.com/settings/security/apppasswords 進行建立。
或者,除了使用應用程式專用密碼外,您也可以使用 OAuth2.0 身份驗證來使用 Gmail。OAuth2.0 比應用程式專用密碼更安全,且無論您是否設定了雙重驗證皆可運作。OAUTHBEARER 和 XOAUTH2 是此類型身份驗證常用的機制。Gmail 兩者皆支援。例如,如果您想使用 OAUTHBEARER,請編輯您的 ~/.gitconfig 檔案,並在您的帳號設定中加入 smtpAuth = OAUTHBEARER
[sendemail] smtpEncryption = ssl smtpServer = smtp.gmail.com smtpUser = yourname@gmail.com smtpServerPort = 465 smtpAuth = OAUTHBEARER
另一個替代方案是使用 Google 開發的名為 sendgmail 的工具,透過 git send-email 寄送電子郵件。
使用 Microsoft Outlook 作為 SMTP 伺服器
與 Gmail 不同,Microsoft Outlook 不再支援應用程式專用密碼。因此,必須使用 OAuth2.0 身份驗證。此外,它僅支援 XOAUTH2 身份驗證機制。
編輯 ~/.gitconfig 以指定您的 Outlook 帳號設定,並使用其 SMTP 伺服器與 git send-email
[sendemail] smtpEncryption = tls smtpServer = smtp.office365.com smtpUser = yourname@outlook.com smtpServerPort = 587 smtpAuth = XOAUTH2
寄送修補程式
當您的提交準備好寄送到郵件列表後,請執行以下命令
$ git format-patch --cover-letter -M origin/master -o outgoing/ $ edit outgoing/0000-* $ git send-email outgoing/*
首次執行時,系統將會提示您輸入憑證。請輸入應用程式專用密碼或您的常規密碼(視情況而定)。
如果您已設定憑證輔助工具(參閱 git-credential[1]),密碼將會儲存於憑證儲存庫中,下次執行時便無須再次輸入。
如果您使用 OAuth2.0 身份驗證,當系統提示時,您需要使用存取權杖 (Access Token) 來取代密碼。線上有多種 OAuth2.0 權杖產生器可供使用。社群維護的憑證輔助工具也可用
-
git-credential-gmail (跨平台,用於驗證 Gmail 帳號的專用輔助工具)
-
git-credential-outlook (跨平台,用於驗證 Microsoft Outlook 帳號的專用輔助工具)
-
git-credential-yahoo (跨平台,用於驗證 Yahoo 帳號的專用輔助工具)
-
git-credential-aol (跨平台,用於驗證 AOL 帳號的專用輔助工具)
您也可以參閱 gitcredentials[7] 以了解更多基於 OAuth 的身份驗證輔助工具。
Proton Mail 不提供用於寄送電子郵件的 SMTP 伺服器。如果您是 Proton Mail 的付費客戶,您可以使用 Proton Mail 官方提供的 Proton Mail Bridge 來建立一個本機 SMTP 伺服器以寄送電子郵件。對於免費與付費使用者,皆可使用社群維護的專案,例如 git-protonmail。
注意:需要安裝您的 Perl 發行版中可能包含的以下核心 Perl 模組
也需要以下額外的 Perl 模組
利用 git send-email 的 sendmailCmd 選項
除了透過 SMTP 伺服器寄送電子郵件外,git send-email 還可以透過任何支援類比 sendmail 命令的應用程式來寄送電子郵件。您可以閱讀上述關於 --sendmail-cmd=<command> 的文件以取得更多資訊。如果您想使用其他應用程式作為 git send-email 的 SMTP 客戶端,或者如果您的電子郵件提供者使用專有 API 而非 SMTP 來寄送郵件,此功能將非常有用。
例如,讓我們看看如何設定 msmtp,這是許多 Linux 發行版中常見的熱門 SMTP 客戶端。編輯 ~/.gitconfig 以指示 git-send-email 使用它來寄送電子郵件。
[sendemail] sendmailCmd = /usr/bin/msmtp # Change this to the path where msmtp is installed
以下是一些此類社群維護的輔助工具連結
-
msmtp (功能豐富的熱門 SMTP 客戶端,適用於 Linux 和 macOS)
-
git-protonmail (可使用 ProtonMail API 寄送電子郵件的跨平台客戶端)
-
git-msgraph (可使用 Microsoft Graph API 寄送電子郵件的跨平台客戶端)
注意事項
git-format-patch[1] 的輸出在使用 git-am[1] 應用時可能會導致不同的提交訊息。所應用的修補程式也可能與原始生成的修補程式不同,或者修補程式應用可能會徹底失敗。
任何形式為
-
三個破折號和換行符,或
-
以
diff-開頭的行,或 -
以 `Index: ` 開頭的行
都被視為補丁的開始,提交日誌訊息將在第一次出現此類行之前終止。
請注意,對於提交訊息中出現的未縮排 diff,這尤其成問題;提交訊息中的 diff 可能會連同補丁部分一起被套用,或者補丁套用機制可能會因為補丁目標不適用而絆倒。例如,這可能是由 Markdown 程式碼區塊中的 diff 引起的。
解決此問題的方法是縮排 diff 或其他可能導致問題的文字。
如果您直接從郵箱套用補丁,這種保真度的缺失可能很容易被注意到。然而,源自 Git 的變更可能會被大量套用,在這種情況下,這將很難被注意到。例如,一個 Linux 發行版可能會使用補丁檔案在上游儲存庫的提交之上套用變更。這說明了這種行為不僅影響電子郵件工作流程。
鑑於這些限制,人們可能會傾向於使用像 patch(1) 這樣的通用工具。然而,patch(1) 不僅會尋找未縮排的 diff(如同 git-am[1]),還會嘗試套用縮排的 diff。
參見
git-format-patch[1], git-imap-send[1], mbox(5)
GIT
git[1] 套件的一部分