複数ユーザがいるrepositoryで自分の書いたコードがどれだけ占めるかを知りたい時に。
ユーザーごとのコミット数
git shortlogを使えば一発
1 |
git shortlog -nse |
返り値
1 |
2651 Hoge <hoge@example.com> |
説明 | |
---|---|
-n | コミット数降順に並べる |
-s | コミットメッセージを省略して一行にする |
-e | メールアドレスも表示する |
変更行数
authorを指定して合算を取得する
1 |
git log --author="hoge@example.com" --numstat --pretty="%H" --no-merges | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("%d (+%d, -%d)\n", plus+minus, plus, minus)}' |
参考 https://qiita.com/Night___/items/359ff81f358968567a45
一回のコミットで大きな変更があったファイルTop10
sort -r -n
で降順に並べ替えてhead -10
で切り抜く
1 |
$ git log --numstat --pretty="%H" --no-merges | grep -E '^\d+?\t' | sort -r -n | head -10 |
特定の拡張子のファイルの変更を取得
grep -E
で絞り込む
1 |
$ git log --numstat --pretty="%H" --no-merges | grep -E '^\d+?\t.+?\.(php|css|js|ctp|html|scss|json|xml)$' | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("%d (+%d, -%d)\n", plus+minus, plus, minus)}' |
特定のパス以外のファイルの変更を取得
grep -v
は一致しなかったものを返す
1 |
$ git log --numstat --pretty="%H" --no-merges | grep -vE '^\d+?\t.+?\.(src|config|webroot)$' | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("%d (+%d, -%d)\n", plus+minus, plus, minus)}' |
複数のユーザーのログを取得する
git --author
はOR指定できる
1 |
git log --author="@example.co.jp\|hoge\|piyo" --name-only --no-merges | grep -E '^\d+?\t' |
変更ファイル数
編集したファイル一覧を取り出す
git log --name-only
でファイルパスのみ取得し、sort
で並べ替え、uniq
で重複行を消すgrep -vE '[a-z0-9]{40}'
はコミットハッシュを弾いている
1 |
git log --since="2019-08-01" --name-only --no-merges --pretty="%H" | grep -vE '[a-z0-9]{40}' | sort | uniq > editfiles.txt |
おまけ
編集したファイルの行数
1 |
wc -l editfiles.txt |
編集してないファイル一覧
grep -f
でfileで検索して一致/不一致を出せる。なおこの時は完全一致のみ
1 |
grep -xvf -files.txt editfiles.txt allfiles.txt > uneditfiles.txt |