Git mailmap или как объединить разработчика

Бывает, что разработчик коммитит под разными именами или имейлами, а это часто может сбивать с толку. Например при работе с историей коммитов мы ищем нужный коммит от определённого разработчика, но он в те далёкие времена называл себя по-другому.

Гит позволяет объединить данные такого разработчика.

Например команда git shortlog -s -n -e выводит количество коммитов на каждого разработчика. Если один разработчик коммитил под разными имейлами или именами, то вывод будет таким:

10 Foo Bar <foo.bar@gmail.com>
3 Foo Bar <[email protected]>
4 Foo B. Bar <foo.bar@example.com>
1 Foobar <foo.bar@baz.com>

Можно объединить такие записи. Для этого создаём в репозитории файл .mailmap и описываем маппинги. Например мы хотим объединить разработчика из вывода выше в такой вид: Foo Bar <[email protected]>.

Для этого надо:

  1. Обновить имя для имейлов <[email protected]> и <[email protected]> на Foo Bar.
  2. Объединить имейлы <[email protected]>, <[email protected]> и <[email protected]> на <[email protected]>.

Файл .mailmap будет выглядеть так:

Foo Bar <foo.[email protected]>
Foo Bar <foo.[email protected]>
<foo.[email protected]> <foo.[email protected]>
<foo.[email protected]> <foo.[email protected]>
<foo.[email protected]> <foo.[email protected]>

Теперь вывод команды будет правильным:

18 Foo Bar <foo.bar@gmail.com>

В файле можно оставлять комментарии, может быть полезно, если пользователей много:

# See: https://git-scm.com/docs/git-shortlog#_mapping_authors
# git shortlog -s -n -e

# Foo Bar
Foo Bar <[email protected]>

# Baz Qux
Baz Qux <[email protected]>
<[email protected]> <[email protected]>
<[email protected]> <[email protected]>

Маппинги, описанные в файле .mailmap влияют так же на вывод комманды git log — данные автора коммита обновятся и там.

Дополнительные материалы