#!/usr/bin/env bash # 項目所有目錄 ITEM_PATH=D:/WorkSpaces/tmp-code/gitTestProjects # 統計結果輸出文件 curRecordFile=D:/gitCodeStat-`date "+%Y%m"`".log" TODAY_DATE=`date "+%Y-%m-%d %H:%M:%S"` # 統計周期長度,默認為1天前的 STAT_DURATION_DAY=1 # 統計代碼 function statCode() { git fetch --all git pull --all # linux: Already up-to-date. win:Already up to date. #if test "Already up to date." = "${isUpdate}" echo -e "stat git code => $(pwd)" # 統計一天內每個開發人員提交的次數,增加的行數,減小的行數與相對增加的行數 git log --all --format='%aN' --since=${STAT_DURATION_DAY}.day.ago | sort -u | while read name; do echo -en "$TODAY_DATE $1 $name"; \ git log --all --since=${STAT_DURATION_DAY}.day.ago --author="$name" --pretty=oneline | awk -vsum=0 '{ sum += 1 } END { printf " %s", sum }' -; \ git log --all --since=${STAT_DURATION_DAY}.day.ago --author="$name" --pretty=tformat: --numstat | awk -vadd=0 -vsubs=0 -vloc=0 '{ add += $1; subs += $2; loc += $1 - $2 } END { printf " %s %s %s \n", add, subs, loc }' -; done >> $curRecordFile } # 遍歷文件夾下的所有項目文件夾 function readDir() { echo "current record file name: $curRecordFile" echo "date project name commits addLines removeLines oppositeAddLines" cd $ITEM_PATH for subDir in `ls $ITEM_PATH` ; do echo "sub dir : $subDir" cd $subDir echo "current dir: $(pwd)" statCode $subDir cd ../ done echo "" >> $curRecordFile } # 啟動腳本 readDir
代碼解讀:
git log --all --format='%aN' --since=${STAT_DURATION_DAY}.day.ago | sort -u
統計近一段時間內所有分支上操作過的所有作者並去重
git log --all --since=${STAT_DURATION_DAY}.day.ago --author="$name" --pretty=oneline| awk -vsum=0 '{ sum += 1 } END { printf " %s", sum }' -;
統計近一段時間內某作者的提交次數
git log --all --since=${STAT_DURATION_DAY}.day.ago --author="$name" --pretty=tformat: --numstat | awk -vadd=0 -vsubs=0 -vloc=0 '{ add += $1; subs += $2; loc += $1 - $2 } END { printf " %s %s %s \n", add, subs, loc }' -;
統計近一段時間內某作者的增加代碼的行數,刪除行數及相對增加的行數