Gitを使って開発を進めていると、誰が、いつ、どんな変更を加えたのかを知ることは非常に重要です。特に、大規模なプロジェクトやチーム開発では、コミットの著者(Author)情報を把握することで、貢献度を把握したり、特定の変更について質問する相手を見つけたりする際に役立ちます。

今回は、git logコマンドを使ってコミットの著者情報を一覧で取得する方法に加えて、各著者のコミット数もカウントする方法について解説します。

git logの基本と著者情報

まず、git logを引数なしで実行してみましょう。

git log

これにより、以下のような形式でコミット履歴が表示されます。

commit 1234567890abcdef...
Author: Your Name <your.email@example.com>
Date:   Thu Jul 25 10:00:00 2024 +0900

    コミットメッセージのタイトル

    コミットメッセージの詳細

この中に、「Author: Your Name your.email@example.com」という行があります。これが、そのコミットを行った著者の情報です。デフォルトでは、コミットハッシュ、著者、日付、コミットメッセージが表示されます。

著者情報のみを抽出する

すべての情報ではなく、著者情報だけを効率的に取得したい場合、git logのオプションを組み合わせることで実現できます。

1. --pretty=formatオプションを使う

--pretty=formatオプションは、git logの出力形式を細かく制御できる非常に強力なオプションです。著者情報だけを表示するには、%an(Author Name)と%ae(Author Email)を使います。

git log --pretty=format:"%an <%ae>"

このコマンドを実行すると、以下のように著者名とメールアドレスのみが一覧で表示されます。

Author One <author.one@example.com>
Author Two <author.two@example.com>
Author One <author.one@example.com>
...

著者ごとのコミット数をカウントする

ここからが本題です。各著者が何回コミットしているかを数えるには、上記のコマンドに加えて、Unix/Linuxのパイプコマンドラインツールを組み合わせるのが最も効率的です。

方法1: sortuniq -cを使う

git log --pretty=format:"%an <%ae>" | sort | uniq -c | sort -nr

このコマンドの各部分を解説します。

  • git log --pretty=format:"%an <%ae>": これは先ほど説明した通り、各コミットの著者名とメールアドレスを「Author Name author.email@example.com」の形式で出力します。
  • | sort: 出力された著者情報をアルファベット順にソートします。これにより、同じ著者の情報が連続して並びます。
  • | uniq -c: uniqコマンドは、連続する重複行を1行にまとめます。-cオプションを付けると、各行が何回出現したか(つまり、その著者のコミット数)をカウントして表示します。
  • | sort -nr: 最後に、コミット数(uniq -cが出力する先頭の数字)を基準に、数値の逆順(nは数値、rは逆順)でソートします。これにより、コミット数が多い著者から順に表示されます。

実行結果は以下のようになります。

     10 Author One <author.one@example.com>
      5 Author Two <author.two@example.com>
      3 Author Three <author.three@example.com>

これで、各著者のコミット数が一目で分かりますね。

方法2: git shortlog -sneを使う

Gitには、この目的のために特化されたgit shortlogという便利なコマンドがあります。

git shortlog -sne
  • git shortlog: コミッターごとのコミットサマリーを生成します。
  • -s: コミットメッセージを表示せず、コミット数だけを表示します。
  • -n: コミット数が多い順にソートします。
  • -e: 著者名に加えてメールアドレスも表示します。

実行結果は以下のようになります。

     10 Author One <author.one@example.com>
      5 Author Two <author.two@example.com>
      3 Author Three <author.three@example.com>

これは先ほどのsort | uniq -cの組み合わせとほぼ同じ結果を提供しますが、よりシンプルにコマンドを記述できるため、非常に推奨される方法です。

まとめ

git logコマンドとその豊富なオプション、そしてGitに組み込まれているgit shortlogコマンドを使うことで、プロジェクトの著者情報だけでなく、各著者のコミット数も簡単に把握できます。

特にgit shortlog -sneは、著者ごとのコミット数を簡潔に取得するのに最適なコマンドです。これらのコマンドは、プロジェクトの貢献度分析や、チーム内の活動状況を把握する上で非常に役立つでしょう。


この記事が気に入ったら『目黒で働く分析担当の作業メモ』ご支援をお願いします!

※OFUSEに飛びます


おすすめの記事