.mailmapでGitログを「新品同様」に整理する:作成者名とメールアドレスを標準化する方法

Git tutorial - IT technology blog
Git tutorial - IT technology blog

なぜGitの履歴は乱れてしまうのか?

貢献度を統計するためにgit shortlog -snを実行した際、おかしな結果になったことはありませんか?「Nguyễn Văn A」という同僚が4回も表示されるようなケースです。ある時はnguyenvana、またある時はA Nguyen[email protected]、最悪の場合は[email protected]といった具合です。

このような状況は、長年続いているプロジェクトでは非常によくあります。私が以前管理していたリポジトリでは、メンバーは12人しかいないのに、作成者リストには50人も並んでいました。主な原因は、git configの設定忘れや、急ぎのバグ修正で個人のPCを使用してしまうことです。その結果、統計データが不正確になり、トレーサビリティ(追跡可能性)が極めて困難になります。

履歴を修正するために、すぐにgit filter-branchBFGを思い浮かべる人もいるでしょう。しかし、それは待ってください!私は以前、履歴を書き換えた後のforce pushをミスして、午後の時間を丸々無駄にしたことがあります。コミットハッシュを変更せず、より安全に解決する方法があります。それが**.mailmap**です。

.mailmap — Gitのためのスマートな「フィルター」

基本として、.mailmapはマッピング(対応付け)レイヤーとして機能します。Gitデータベース内の元のデータを直接修正するわけではありません。代わりに、git loggit blameを実行した際、Gitはこのファイルを参照して、設定したルールに従って名前とメールアドレスを表示します。

いわばスマートな電話帳のようなものです。相手が固定電話、個人携帯、会社携帯のどれからかけてきても、画面には同一の氏名が表示されます。過去のコミット構造に一切触れることなく、すべてを整理整頓できます。

.mailmapの詳細な設定ガイド

1. 初期化

プロジェクトのルートディレクトリに、.mailmapという名前のシンプルなテキストファイルを作成するだけです。

touch .mailmap

2. よく使われる構文

このファイルの構文は非常に柔軟です。ここでは、私がよく適用する3つのシナリオを紹介します。

複数のメールアドレスを1つの標準名に統合する:
一人のユーザーが異なるメールアドレスを使用しているが、表示名は同じ場合に便利です。

Proper Name <[email protected]> <[email protected]>
Proper Name <[email protected]> <[email protected]>

誤った名前とメールアドレスの両方を修正する:
古い名前とメールアドレスのペアを、新しいペアに正確にマッピングします。

Proper Name <[email protected]> Commit Name <[email protected]>

特定のメールアドレスの名前のみを標準化する:
メールアドレスは正しいが、表示名がニックネームやコンピュータ名になっている場合に役立ちます。

Proper Name <[email protected]>

3. プロジェクトでの実例

例えば、「Trần Văn Tú」さんが3つの異なる識別子でログを混乱させているとしましょう。.mailmapファイルに次のように記述します。

Tran Van Tu <[email protected]> <[email protected]>
Tran Van Tu <[email protected]> Tu Tran <[email protected]>
Tran Van Tu <[email protected]> tu.tran <[email protected]>

ファイルを保存してgit shortlog -snを実行してみてください。魔法のようなことが起こります。以前は別々だった3行が、「Tran Van Tu」という名前の1行に統合されます。

.mailmapの力を最大限に引き出す

.mailmapの真の威力は、git blameコマンドで発揮されます。3年前のコードの担当者を探す際、すでに使われていない見知らぬメールアドレスではなく、本名がすぐに表示されるようになります。

Git バージョン 2.9.0 以降、ほとんどのコマンドはルートディレクトリにあるこのファイルを自動的に認識します。ただし、念のため、あるいは古いツールを使用している場合は、フラグを追加することもできます。

git log --use-mailmap

私の個人的な経験から言うと、この.mailmapファイルをリポジトリにコミットすることをお勧めします。そうすることで、チームメンバー全員がクリーンなプロジェクト履歴を共有できます。毎月の貢献度レポート作成にかかる時間を、手作業の集計から解放し、少なくとも30〜45分は短縮できるはずです。

エラーを避けるための注意点

  • 順序: Gitはファイルを上から順に読み込みます。最初に一致したルールが優先されます。
  • 正確性: Gitはメールアドレスの大文字と小文字を区別します(Case sensitive)。間違いを避けるために、ログからメールアドレスを直接コピーすることをお勧めします。
  • 構文: 名前と角括弧 < > の間には必ずスペースを入れてください。このスペースがないと、Gitはファイルを無視してしまいます。

結び

Gitの整理には、必ずしも「大がかりな」テクニックが必要なわけではありません。小さなテキストファイル一つで、ソースコード管理におけるプロフェッショナリズムと細やかさを示すことができます。今日から .mailmap を作成してみましょう。同僚もきっと、この整頓された状態に感謝してくれるはずです!

Share: