@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

Gitのdiffを振り返る

Gitのコミット数を振り返る - @ledsun blogで、Gitのコミット数をふりかえりました。 今年はコミットの粒度を変えたためコミット数が増えています。 その結果、作業効率は上がったのでしょうか?今度はGitのdiffをふりかえってみます。

日付単位でgit diffのsohrtstatをとります。

3 files changed, 8 insertions(+), 3 deletions(-)

こんなやつです。

次のRubyスクリプトを使いました。

require 'date'

base_date = Date.new(2019, 5, 22)
0.upto(585) do |i|
  target_date = base_date + i

  start_commit = `git rev-list -1 --before="#{target_date} 00:00" current`.chomp
  end_commit = `git rev-list -1 --before="#{target_date} 23:59" current`.chomp

  # An expected output string format is like " 3 files changed, 8 insertions(+), 3 deletions(-)".
  stats = `git diff --shortstat #{start_commit} #{end_commit} ':(exclude)package-lock.json' ':(exclude)*.min.js' ':(exclude)*.css' ':(exclude)dist/*' ':(exclude)dev/vender' ':(exclude)src/lib/modules' ':(exclude)*.md'`
  parsed_stats = stats.split(",").map { _1.to_i }
  if parsed_stats.size == 3
    puts [target_date].concat(parsed_stats).concat([start_commit, end_commit]).join(" ")
  else
    puts [target_date, 0, 0, 0].join(" ")
  end
end

gitのcommitの日付を元にしています。 git rebaseなどで順序が入れ替えていると、本当にその日付にコミットしたとは限りません。 全体的な傾向がわかればいいので、ここでは無視します。

gunplotでグラフ化します。

gnuplot> set xdata time
gnuplot> set timefmt "%Y-%m-%d"
gnuplot> plot 'daily_git_stast.dat' using 1:3 with steps title 'insertions', '4col.csv' using 1:4 with steps title 'deletions'

f:id:ledsun:20201226100949p:plain
daily git diff

4000行を超える変更をした日が二つあります。