LoginSignup
2
2

More than 5 years have passed since last update.

Gitでコミットの内訳(加減行数)を指定された月毎に可視化する

Last updated at Posted at 2017-02-25

20170307追記

  • git shortlog --after=YYYY-mm-dd --before=YYYY-mm-dd でなぜかプロジェクトのコミット内容がうまくいかなかった
  • 解決策としては当月であれば、当日までにするとよいと思う。
  • 自宅の個人端末でLaravelのプロジェクトを見た限りでは特に問題なかった
  • 謎は深まるばかり・・

やりたいこと

  • 今のプロジェクトはgithubを使っていないのでコミット状況がわかりにくい
  • とりあえず
    • 期間指定できて
    • コミッタ毎に
    • コミット数と差分行数がわかればいい
  • 出来そうなので、作ればいい!

やったこと

  • Gitコマンドで期間指定する方法があるか調べる
    • --beforeオプションと--afterオプションがあるよ!
$ $ git log --after='2016-11-01' --before='2017-12-01'

出来そうなので作る

#!/usr/local/bin/bash

set -ue

if [ $# -ne 1 ] ; then
    echo "USAGE: $0 201702"
    exit
fi

if [[ ! "${1}" =~ ^[0-9]{6}$ ]] ; then
    echo "USAGE: $0 201702"
    exit
fi

started_at="$(echo "${1}" | sed 's/\([0-9][0-9][0-9][0-9]\)\(.*\)/\1-\2-01/')"
ended_at="$(date +'%Y-%m-01' -d "${started_at} +1 month")"
echo -e "\e[36m${started_at}-${ended_at}間のコミット状況\e[m"

git shortlog -s --after="${started_at}" --before="${ended_at}" | sort -nr | while read line ; do
    echo -e "$(echo "${line}" | sed 's/\([0-9]*\)/\\e[33m\1\\e[mcommits/')"
    author="$(echo ${line} | sed 's/  */ /g' | cut -d' ' -f2- | tr '\t' '.')"
    result="$(git log --numstat --pretty="%H" --author="${author}" --after="${started_at}" --before="${ended_at}" | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("%d %d\
", plus, minus)}')"
    echo -e "\e[32m+$(echo ${result} | cut -d' ' -f1)\e[m \e[31m-$(echo ${result} | cut -d' ' -f2)\e[m
"
done

出力結果

  • サンプルにはLaravelのプロジェクト(branch: 5.2)を利用させていただきました

スクリーンショット 2017-02-25 18.47.45.png

Macで使用する場合

  • dateコマンドがGNU標準ではないので下記に注意してください
    • coreutilsをインストールして、gdateを使う
    • vオプションを利用する
  • 自分はcoreutilsを利用しています

あとがき的な

  • 正直、コミット数とか行数なんて見ても大した意味ない
    • ステップ数文化みたいなもん
  • 前回書いたPHPで循環的複雑度をコミッタ毎に可視化すると組み合わせることで
    • 誰が
    • どれくらいの量を
    • こみっとしているか
  • に加えて、
    • どの程度のメソッドが生やされ
    • それらの複雑度が本人の平均値にどう影響するか?
  • といった分析が可能になると思います
  • 循環的複雑度を計測するスクリプトよりも先にこちらを書いていましたが、正直これ単体だとあまり意味がないので順番が前後しましたね
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2