使用 git 改完一段程式碼後,你總想回傳給上游開發者。一般是利用 git-format-patch 來產生 patchset,然後搭配郵件軟體軟體寄出。可以配合 git-format-patch 使用的寄信軟體有 git-send-email, git-imap-send 等等,或你也可用 formail 將郵件轉為你的郵件軟體認得的格式。

個人喜歡 git-imap-send,它會將 patch 透過 IMAP 協定存在郵件伺服器上的草稿目錄,如此你可以稍候再透過郵件軟體編修或決定是否寄出。

GMail 設定方式

git-imap-send 使用時,需要先設定 IMAP 伺服器位置與帳號密碼。你可以直接編輯 .gitconfig ,寫入如下設定

[imap]
# Folder = "[Gmail]/Drafts"
Folder = "[Gmail]/&g0l6Pw-"
Host = "imaps://imap.gmail.com"
User = "[email protected]"
port = 993
sslverify = false

你如果看網路上的大部份說明文件,會告訴你 Folder 應該填 [Gmail]/Drafts。很神秘的是,大約我是中文使用者,我的草稿目錄就叫做「草稿」。若用 [Gmail]/Drafts 會出現 “(NO) – [TRYCREATE] Folder doesn’t exist. (Failure)” 錯誤訊息。但是 git-imap-send 不會自行編碼,因此你必須先自行依照 RFC2060 轉碼後,寫入設定,”[Gmail]/草稿” 即為”[Gmail]/&g0l6Pw-“。

附帶一提,Debian 的 git 由於 openssl 的授權問題,並沒有編譯入 SSL 支援。因此你得自行編譯一次,如想使用 Gmail 的 IMAP 寄信的話。

相關 Patch 格式、回覆地址設定

若你想透過 Gmail 送 patch,另外一個需要注意的是 Gmail 會弄爛內文的換行,因此請將 patch 以 attachment 的方式寄送,夾檔 Disposition 是 inline 或 attach 都可以。做法如下

git format-patch –stdout –inline –keep-subject origin | git-imap-send

為了方便別人閱讀,你也可以將夾檔副檔名改為 .txt,以便大部分郵件軟體可以直接閱讀辨識。

[format]
suffix = .txt
inline

另外你也可以在郵件表頭中指定回覆的地址。例如你可以指定請大家回信到 mailing list,以便可以在公開場合進行 patch review。你可以在 git config 中加入如下設定,由於你可能參與很多計劃,最好是加在 project/.git/config 中,而非 ${HOME}/.gitconfig.

[format]
        headers = "To: patches <[email protected]>\nReply-To: devel <[email protected]>\n"

其他方便開發者閱讀的參數如 –signoff, –thread, –numbered 等, 相關細節請見 git-format-patch (1) man page.

  • Endle

    谢谢你的文章,解决了我的问题