名称

gitmailmap - 映射作者/提交者的姓名和/或电子邮件地址

概要

$GIT_WORK_TREE/.mailmap

描述

如果仓库的顶层目录中存在 .mailmap 文件,或者存在于 mailmap.filemailmap.blob 配置选项所指向的位置(参见 git-config[1]),它将被用于将作者和提交者的姓名及电子邮件地址映射为规范的真实姓名和电子邮件地址。

语法

# 字符表示注释的开始,直到行尾。空行将被忽略。

在简单形式中,文件中的每一行由作者的规范真实姓名、空格以及提交中使用的电子邮件地址(括在 <> 之间)组成,用于映射到该姓名。例如

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>

注意事项

Git 在访问工作树中的 .mailmap 文件时不会跟随符号链接。这样可以确保从索引或树中访问文件与从文件系统中访问文件时的行为保持一致。

示例

您的历史记录中包含两名作者(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] 套件的一部分