发现在某厂实习的同学有一个码力统计平台,可以看到写了多少代码。由此联想到,我们每次执行 Commit 的时候都可以看到控制台输出的文件行数增加减少的提示。因此此信息是被 Git 统计了的,那么当然可以在本地获取到,只不过获取的是单个存储库的内容。
我更好奇为啥 Gitlab 等 Git 端没有集成这个功能,是觉得意义不大吗
首先,我们来用 git log
获取当前存储库所有贡献者,并用 sort -u
去重。此处获得的名字是 gitconfig
设置的名字。
1 | authors=$(git log --format='%aN' | sort -u) |
接下来,我们来遍历这些名字,并根据作者名字获取numstat
。
其中,--pretty:tformat:
是一个空的自定义格式,表示我们将会忽略所有提交信息,这样我们的输出结果里只有numstat
了。
最后,使用awk
来统计数量即可。
1 | # 一行一行读取名字 |
最终,我们可以把代码写成一行并用管道连接。可以写成一个alias
,如果你想的话。
1 | git log --format='%aN' | sort -u | while read name; do printf '%-20s' "[$name]"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "[Add] %-6d [Removed] %-6d [Total] %-6d\n", add, subs, loc }'; done |
这样就可以看到你写了多少行代码了。哇,好有用的功能啊。
1 | [Nivek] [Add] 114514 [Removed] 1919 [Total] 112595 |