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'
- 差分抽出をどうすれば見れるか
- 思いつかなかったのでggrksして
- Gitの貢献度?を計るワンライナーたちあたりを参考に
出来そうなので作る
#!/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)を利用させていただきました
Macで使用する場合
- dateコマンドがGNU標準ではないので下記に注意してください
- coreutilsをインストールして、gdateを使う
- vオプションを利用する
- 自分はcoreutilsを利用しています
あとがき的な
- 正直、コミット数とか行数なんて見ても大した意味ない
- ステップ数文化みたいなもん
- 前回書いたPHPで循環的複雑度をコミッタ毎に可視化すると組み合わせることで
- 誰が
- どれくらいの量を
- こみっとしているか
- に加えて、
- どの程度のメソッドが生やされ
- それらの複雑度が本人の平均値にどう影響するか?
- といった分析が可能になると思います
- 循環的複雑度を計測するスクリプトよりも先にこちらを書いていましたが、正直これ単体だとあまり意味がないので順番が前後しましたね