在工作中,我想统计各开发人员,在一定日期范围内的编码情况,故有了此脚本。
一、先贴图,看看效果:
此图中,用“开发者姓名”代替了实际项目中git的账号名称,输出结果按提交次数倒序输出。
二、接下来,贴脚本代码,该脚本是shell脚本,主要用到了git,awk两个命令:
#!/bin/sh
# author:xjf
# date: 2020-9-11
# desc: 统计代码量
# git目录
dir_list="project1 project2"
# 创建统计表
commit_file="commit.txt";
if [ -f $commit_file ]; then
rm $commit_file
fi
touch $commit_file
# 循环目录
for dir in $dir_list
do
echo "project:$dir"
cd $dir
if [ $? -eq 0 ]; then
# 同步代码
git pull >/dev/null
# 统计代码信息
git log --pretty=format:%H,%ai,%an,%s --no-merges --since=$1 --until=$2 --numstat |awk -F, 'BEGIN{hash="";author=""; date="";comment="";}{if (NF>=4) {gsub(/ /,"_",$0);hash=$1; date=substr($2,1,19); author=$3; comment=$4;} else if (NF>0) print hash"t" date "t" author"t" comment "t" $0;}' |awk '{hash[$1] = $1; author[$1] = $3; date[$1] = $2; comment[$1] = $4; file[$1] += 1; add[$1] += $5; del[$1] += $6; fileName[$1] = fileName[$1]","$7} END{for (i in hash) {printf "%s t %s t %s t %s t %d t %d t %d n",hash[i],author[i],comment[i],date[i],add[i],del[i],file[i]}}' >> ../$commit_file;
#返回上级目录
cd ..
fi
done
# 输出结果
echo "-----------------------------------"
awk 'BEGIN{printf "开发者t提交次数t新增代码行数t删除代码行数t改动文件数n"}'
awk '{author[$2] = $2; commit[$2] += 1; add[$2] += $5; del[$2] += $6; file[$2] += $7;}END{for (i in author){ printf "%st%dt%dt%dt%dn",author[i],commit[i],add[i],del[i],file[i]}}' $commit_file | sort -k 2 -n -r ;
以上代码,有一处需要修改为自己的信息:dir_list修改为自己的项目主目录名称,用空格隔开。
三、创建自己的脚本文件:
在自己项目的根目录里创建可执行文件,如 get_statistic_commit.sh,并给予执行权限(chmod u+x get_statistic_commit.sh),将以上脚本的内容写到该文件中。
四、执行脚本:
执行脚本时,有两个参数:起始日期、结束日期,执行的命令如下:
$ ./get_statistic_commit.sh 2020-09-01 2020-09-30
说明:git log命令的参数--since会使用第一个日期参数,本例中为2020-09-01,但由于--since参数统计git代码时,并不包括指定日期,即2020-09-01当天的代码并不会统计进来,故起始日期应该写成前一天的日期。
五、执行环境:
该脚本可在linux环境下执行,前提是需安装git。也可以在win平台中执行,前提是安装git.exe。
本示例中使用的是git.exe:
写在最后,望各位大佬多多指正、交流,共同学习、进步。