やること
Gitのドキュメントを読んでいて、git log
は好きなフォーマットで出力できるオプション(--pretty
)があったことに気づいたので、それを利用してCSVとして出力してみました。
いったんCSVにしてしまえば、pythonやRなどいろいろな応用が効くと思います。
今回はGoogle Spreadsheetのグラフ機能を使って日ごとのコミット数をグラフにしました。
git log
リポジトリを用意します。
今回はVue.jsのリポジトリを題材として使わせていただきました。
$ git clone https://github.com/vuejs/vue.git
cd
コマンドでリポジトリの中に入ります。
$ cd vue
まず見出し行を用意したいと思います。
書式としてはこんな感じです。
$ echo '"見出し1","見出し2"' > "ファイル名.csv"
今回は日付、メッセージ、コミットした人、ハッシュを出力する予定なので、
$ echo '"date","massage","committer","hash"' > "gitlog.csv"
と打ちます。
続いてメインディッシュのgit log
です。
以下のような感じに命令します。
$ git log --pretty=format:'"%cd","%s","%cn","%H"' --date=format:'%Y/%m/%d %H:%M:%S' --branches --remotes >> "gitlog.csv"
--pretty=format:
でフォーマットを指定します。
フォーマットについてはGit - コミット履歴の閲覧を参照ください。
--date=format:
では日付のフォーマットを指定します。
こちらはなんとなく分かると思います(なげやり)。
--branches
と--remotes
はおまけで、ブランチに関わらず、リモートリポジトリを含めて出力するようになっているはずです。
それらを>> "gitlog.csv"
の部分でさきほどの見出しだけのファイルに追記しています。
出力されたものが以下。

それらしく出ていると思います。
ちなみに5882行ありました(2019/10/30現在)。すごい…!
Spreadsheetにインポート
sheet.new
にアクセスして新しいスプレッドシートを作ります。
ファイル -> インポート
からgitlog.csv
をアップロードできます。
オプションとかは初期設定でいいはずです。
するとこんな感じになります。

これをグラフにしたいのですが、その際にDateにTimeが含まれているので(Datetimeやないかい)、
Timeまで見ると細かすぎるので、
そこをなんとかしようと思います。
言い訳するとログ自体はできる限り細かく取って、あとでデータを加工したほうがいいと思ったのですよ。
で、1E
のところにdatetext
という見出しを入力します。
次に、2E
のところに
=text(A2,"YYYY-mm-dd")
こんな感じの式を入れます。
そしてエイヤッとダブルクリックすると…

こんな感じでうまいこと年月日部分を取り出せました。
そしてE列を選択し、挿入 -> グラフ
を命令すると、

グラフができました! Dateの進む方向が右へ行くにつれて昔になっています。
まず行1を固定(表示 -> 固定
から)したあと、データ -> 列Eを基準にA-Zでシートを並べ替え
をしてみます。

うまく取れてない行(たぶんカンマとかが入っちゃったのかと)があったので削除しちゃいます。
ちなみに先頭だけではなく、中間のほうにも2件ありました。
そして一日だけ妙にコミット数の多い日があったので、グラフの設定のほうから50でリミットをかけます。

これにて完成!

こうしてみると突出していた2015年の9月に加え、16,17,18年にも1回ずつぐらいピークの日があったようです。
しかし10コミットに達する日が割とあるのは尊敬します。
まとめ
git logのフォーマット機能を使ってCSVを出力してみました。
うまくすればCircleCIなどで自動化もできそうな感じがしないでもないですね。
じき試したい…。