名稱

gitmailmap - 對應作者/提交者的姓名與/或電子郵件地址

概要

$GIT_WORK_TREE/.mailmap

描述

如果儲存庫頂層存在 .mailmap 檔案,或是由 mailmap.filemailmap.blob 設定選項所指向的位置存在該檔案(請參閱 git-config[1]),它將用於將作者和提交者的姓名與電子郵件地址,對應為正規的真實姓名與電子郵件地址。

語法 (SYNTAX)

# 字元代表該行剩餘部分為註解,空白行將被忽略。

在簡單形式中,檔案中的每一行由作者的正規真實姓名、空白字元,以及提交時使用的電子郵件地址(以 <> 括起)組成,以對應至該姓名。例如:

Proper Name <commit@email.xx>

較複雜的形式如下:

<proper@email.xx> <commit@email.xx>

這允許 mailmap 僅替換提交中的電子郵件部分;以及:

Proper Name <proper@email.xx> <commit@email.xx>

這允許 mailmap 替換符合指定提交電子郵件地址之提交的姓名與電子郵件;以及:

Proper Name <proper@email.xx> Commit Name <commit@email.xx>

這允許 mailmap 替換同時符合指定提交姓名與電子郵件地址之提交的姓名與電子郵件。

電子郵件與姓名在比對時皆不區分大小寫。例如,這同樣會匹配上述的 Commit Name <commit@email.xx>

Proper Name <proper@email.xx> CoMmIt NaMe <CoMmIt@EmAiL.xX>

注意事項

當存取工作目錄中的 .mailmap 檔案時,Git 不會跟隨符號連結。這能確保當從索引或樹狀結構存取檔案時,其行為與從檔案系統存取時保持一致。

範例

您的歷史紀錄中包含兩位作者 Jane 和 Joe 的提交,他們的名字在儲存庫中以多種形式出現:

Joe Developer <joe@example.com>
Joe R. Developer <joe@example.com>
Jane Doe <jane@example.com>
Jane Doe <jane@laptop.(none)>
Jane D. <jane@desktop.(none)>

現在假設 Joe 希望使用他中間名的縮寫,而 Jane 偏好將她的姓氏完整拼寫出來。用來修正這些姓名的 .mailmap 檔案看起來會像這樣:

Joe R. Developer <joe@example.com>
Jane Doe <jane@example.com>
Jane Doe <jane@desktop.(none)>

請注意,若僅要修正姓名,則無需對 <jane@laptop.(none)> 進行對應。然而,通常您不會希望保留明顯有誤的 <jane@laptop.(none)><jane@desktop.(none)> 電子郵件地址。一個同時修正這些問題的 .mailmap 檔案如下:

Joe R. Developer <joe@example.com>
Jane Doe <jane@example.com> <jane@laptop.(none)>
Jane Doe <jane@example.com> <jane@desktop.(none)>

最後,假設 Joe 和 Jane 共用一個電子郵件地址,但姓名不同(例如歷史紀錄中有兩個由錯誤報告系統產生的提交)。亦即,歷史紀錄中出現的姓名為:

Joe <bugs@example.com>
Jane <bugs@example.com>

一個也能處理這些情況的完整 .mailmap 檔案(在上述範例中增加兩行)將會是:

Joe R. Developer <joe@example.com>
Jane Doe <jane@example.com> <jane@laptop.(none)>
Jane Doe <jane@example.com> <jane@desktop.(none)>
Joe R. Developer <joe@example.com> Joe <bugs@example.com>
Jane Doe <jane@example.com> Jane <bugs@example.com>

GIT

git[1] 套件的一部分