自分が一日何をしたのか、gitのログから調べたい。

git-logはいろいろオプションがあって、あとで処理しやすいような形式として

$ git -C path/to/repos log --branches --author="Your name" --since=1.days --pretty=format:"%ad,%s" | cat
  • -C path で、リポジトリのパスを指定
  • --pretty=format:"〜"で、自分好みのフォーマットが指定できる
  • --branches で(ローカルの)すべてのブランチ
  • --author= で自分がオーサーのコミットのみ
  • %ad : オーサーの日付
  • %s : コミットのサマリ

これを実行すると

Thu Jul 17 15:59:52 2014 +0900,hogehoge
Thu Jul 17 15:22:53 2014 +0900,fugafuga
...

みたいな形で出力される。あとはパイプ先でカンマでぶった切ってゴニョゴニョすればよい。

日時のフォーマットが煩雑で嫌な場合には(デフォルトは何フォーマット?) --date=iso(YYYY-mm-dd HH:MM:SS +0900) とか --date=raw(エポック秒 +0900) とかすればよい(strftimeできないのが残念)。

何行変更したかを調べるには --shortstat を使うと

$ git log --branches --author="Your name" --since=1.days --shortstat --oneline
b42f934 hogehoge
1 file changed, 3 insertions(+), 24 deletions(-)
c450d58 fugafuga
9 files changed, 35 insertions(+), 86 deletions(-)
...

などと出力されるので正規表現で取り出して合計を取るには

$ git log --branches --author="Your name" --since=1.days --shortstat --oneline | ruby -ne 'BEGIN{tf=ti=td=0}; if $_ =~ /(\d+) files? changed/ then tf += $1.to_i; ti += $1.to_i if $_ =~ /(\d+) insertion/; td += $1.to_i if $_ =~ /(\d+) deletion/; end; END{puts "#{tf},#{ti},#{td}"'

などとすれば一日に編集したトータルのファイル数、追加行数、削除行数が出せる。

これをgithubのCode frequencyみたいに日々の量をプロットしてやるとなかなか面白いのではないか。