Git
英文 ▾ 主題 ▾ 最新版本 ▾ git-send-email 上次更新於 2.47.0

名稱

git-send-email - 以電子郵件傳送一組修補程式

概要

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 的介面來提供必要的資訊。

修補程式檔案接受兩種格式

  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>,…​

指定每個電子郵件的「Bcc:」值。預設值為 sendemail.bcc 的值。

此選項可以指定多次。

--cc=<address>,…​

指定每個電子郵件的起始「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 標頭將會提示輸入。

請參閱 CONFIGURATION 區段的 sendemail.multiEdit

--from=<address>

指定電子郵件的寄件者。如果未在命令列上指定,則會使用 sendemail.from 設定選項的值。如果未設定命令列選項和 sendemail.from,則會提示使用者輸入該值。提示的預設值會是 GIT_AUTHOR_IDENT 的值,如果未設定,則會是 GIT_COMMITTER_IDENT 的值,如同「git var -l」傳回的值。

--reply-to=<address>

指定收件者回覆應傳送至的地址。如果回覆訊息應傳送至與 --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=<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 傳送訊息的傳輸編碼。遇到非 ASCII 訊息時,7bit 將會失敗。當存放庫包含包含歸位字元的檔案時,quoted-printable 會很有用,但會使手動檢查原始修補程式電子郵件檔案(從 MUA 儲存)更加困難。base64 更為萬無一失,但也更加不透明。auto 會在可能的情況下使用 8bit,否則使用 quoted-printable。

預設值為 sendemail.transferEncoding 設定值的值;如果未指定,則預設為 auto

--xmailer
--no-xmailer

新增(或阻止新增)「X-Mailer:」標頭。依預設,會新增標頭,但可以透過將 sendemail.xmailer 設定變數設為 false 來關閉。

傳送

--envelope-sender=<address>

指定用於傳送電子郵件的信封寄件者。如果您的預設地址不是訂閱清單的地址,這會很有用。若要使用 From 地址,請將值設定為「auto」。如果您使用 sendmail 二進位檔,則您必須具有 -f 參數的適當權限。預設值為 sendemail.envelopeSender 設定變數的值;如果未指定,則信封寄件者的選擇會留給您的 MTA。

--sendmail-cmd=<command>

指定要執行以傳送電子郵件的命令。該命令應類似 sendmail;具體來說,它必須支援 -i 選項。必要時,該命令會在 shell 中執行。預設值為 sendemail.sendmailCmd 的值。如果未指定,且也未指定 --smtp-server,git-send-email 將會在 /usr/sbin/usr/lib 和 $PATH 中搜尋 sendmail

--smtp-encryption=<encryption>

指定 SMTP 連線開始加密的方式。有效值為 ssltls。任何其他值都會恢復為純文字(未加密)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-usersendemail.smtpUser),但未指定密碼(使用 --smtp-passsendemail.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-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 組態變數。

自動化

--no-to
--no-cc
--no-bcc

清除先前透過設定設定的任何「收件者:」、「副本:」、「密件副本:」位址清單。

--no-identity

清除先前透過設定設定的 sendemail.identity 的已讀取值(如果有的話)。

--to-cmd=<command>

指定每個修補程式檔案執行一次的命令,該命令應產生特定於修補程式檔案的「收件者:」項目。此命令的輸出必須是每行一個電子郵件地址。預設值為 sendemail.toCmd 組態值。

--cc-cmd=<command>

指定每個修補程式檔案執行一次的命令,該命令應產生特定於修補程式檔案的「副本:」項目。此命令的輸出必須是每行一個電子郵件地址。預設值為 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 尾碼或副本:行中找到的電子郵件新增至副本清單。預設值為 sendemail.signedOffByCc 組態值;如果未指定,則預設為 --signed-off-by-cc。

--[no-]cc-cover

如果設定此選項,則將在系列的第一個修補程式(通常是封面信)的副本:標頭中找到的電子郵件新增至每封設定電子郵件的副本清單。預設值為 sendemail.ccCover 組態值;如果未指定,則預設為 --no-cc-cover。

--[no-]to-cover

如果設定此選項,則將在系列的第一個修補程式(通常是封面信)的收件者:標頭中找到的電子郵件新增至每封設定電子郵件的收件者清單。預設值為 sendemail.toCover 組態值;如果未指定,則預設為 --no-to-cover。

--suppress-cc=<category>

指定要抑制自動副本的額外收件者類別

  • author 將避免包括修補程式作者。

  • self 將避免包括寄件者。

  • cc 將避免包括修補程式標頭中的副本行中提及的任何人,但本身除外(對此使用 self)。

  • bodycc 將避免包括修補程式內文(提交訊息)中的副本行中提及的任何人,但本身除外(對此使用 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 將會抑制所有自動產生的副本 (cc) 值。

預設值為 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 標頭時,不存在 In-Reply-To 標頭 (尤其注意 git format-patch 可以設定為自行執行執行緒)。否則可能無法在收件人的 MUA 中產生預期的結果。

--[no-]mailmap

使用 mailmap 檔案 (請參閱 gitmailmap[5]) 將所有位址對應到其標準的真實姓名和電子郵件位址。可以使用 sendemail.mailmap.filesendemail.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 個字元的行之修補程式,除非使用適當的傳輸編碼 (autobase64quoted-printable);這是由於 https://www.ietf.org/rfc/rfc5322.txt 中描述的 SMTP 限制所致。

預設值為 sendemail.validate 的值;如果未設定,則預設為 --validate

--force

即使安全檢查會阻止傳送電子郵件,仍然傳送電子郵件。

資訊

--dump-aliases

不執行正常操作,而是從設定的別名檔案中轉儲簡寫別名名稱,每個名稱一行,並依字母順序排列。請注意,這僅包含別名名稱,不包含其展開的電子郵件位址。請參閱 sendemail.aliasesFile 以取得關於別名的詳細資訊。

--translate-aliases

不執行正常操作,而是從標準輸入讀取,並將每行解譯為電子郵件別名。根據設定的別名檔案翻譯它。將每個翻譯的名稱和電子郵件位址輸出到標準輸出,每行一個。請參閱 sendemail.aliasFile 以取得關於別名的詳細資訊。

設定

本節中,此行以下的任何內容,都是從 git-config[1] 文件中選擇性包含的。其內容與在那裡找到的相同

sendemail.identity

組態身分。給定後,會導致 sendemail.<identity> 子區段中的值優先於 sendemail 區段中的值。預設身分是 sendemail.identity 的值。

sendemail.smtpEncryption

請參閱 git-send-email[1] 以取得描述。請注意,此設定不受 identity 機制的限制。

sendemail.smtpSSLCertPath

ca 憑證的路徑 (可以是目錄或單個檔案)。將其設定為空字串以停用憑證驗證。

sendemail.<identity>.*

以下找到的 sendemail.* 參數的特定於身分識別版本,當通過命令列或 sendemail.identity 選取此身分識別時,優先於這些參數。

sendemail.multiEdit

如果為 true (預設值),將會產生單個編輯器執行個體,以編輯您必須編輯的檔案 (當使用 --annotate 時的修補程式,以及當使用 --compose 時的摘要)。如果為 false,將會一個接一個地編輯檔案,每次都會產生一個新的編輯器。

sendemail.confirm

設定是否在傳送之前確認的預設值。必須為 alwaysnevercccomposeauto 其中之一。請參閱 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 中指定的檔案格式。必須為 muttmailrcpineelmgnussendmail 其中之一。

每個格式的別名檔案看起來如何,可以在相同名稱的電子郵件程式的文件中找到。與標準格式的不同之處和限制如下所述

sendmail
  • 不支援引用的別名和引用的位址:包含 " 符號的行會被忽略。

  • 不支援重新導向到檔案 (/path/name) 或管道 (|command)。

  • 不支援檔案包含 (:include: /path/name)。

  • 會將標準錯誤輸出上印出任何明確不支援的建構,以及任何其他剖析器無法辨識的行的警告。

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

屬於 git[1] 套件的一部分

scroll-to-top