GITMAILMAP(5) | Git Manual | GITMAILMAP(5) |
In the simple form, each line in the file consists of the canonical real name of an author, whitespace, and an email address used in the commit (enclosed by < and >) to map to the name. For example:
Proper Name <commit@email.xx>
The more complex forms are:
<proper@email.xx> <commit@email.xx>
which allows mailmap to replace only the email part of a commit, and:
Proper Name <proper@email.xx> <commit@email.xx>
which allows mailmap to replace both the name and the email of a commit matching the specified commit email address, and:
Proper Name <proper@email.xx> Commit Name <commit@email.xx>
which allows mailmap to replace both the name and the email of a commit matching both the specified commit name and email address.
Both E-Mails and names are matched case-insensitively. For example this would also match the Commit Name <commit@email.xx> above:
Proper Name <proper@email.xx> CoMmIt NaMe <CoMmIt@EmAiL.xX>
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)>
Now suppose that Joe wants his middle name initial used, and Jane prefers her family name fully spelled out. A .mailmap file to correct the names would look like:
Joe R. Developer <joe@example.com> Jane Doe <jane@example.com> Jane Doe <jane@desktop.(none)>
Note that there’s no need to map the name for <jane@laptop.(none)> to only correct the names. However, leaving the obviously broken <jane@laptop.(none)> and <jane@desktop.(none)> E-Mails as-is is usually not what you want. A .mailmap file which also corrects those is:
Joe R. Developer <joe@example.com> Jane Doe <jane@example.com> <jane@laptop.(none)> Jane Doe <jane@example.com> <jane@desktop.(none)>
Finally, let’s say that Joe and Jane shared an E-Mail address, but not a name, e.g. by having these two commits in the history generated by a bug reporting system. I.e. names appearing in history as:
Joe <bugs@example.com> Jane <bugs@example.com>
A full .mailmap file which also handles those cases (an addition of two lines to the above example) would be:
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>
04/24/2023 | Git 2.40.1 |