为什么要做贡献统计?
在团队开发中,清晰的代码贡献数据是项目管理和协作优化的重要参考。除了直观地看谁写得多,这些数据还能帮助快速掌握迭代节奏、识别模块依赖风险、明确核心贡献者以及客观评估开发效率。
核心脚本:一行命令搞定统计 + 对齐
下面这个脚本是实战中的常用方案,只需复制到终端执行,就能输出左对齐的作者名和右对齐的数字列,适配所有终端环境:
# 打印表头
printf "%-15s %8s %10s %10s %10s\n" "提交者" "提交次数" "新增行数" "删除行数" "总计行数"
# 循环处理每个作者
git shortlog -sn | while read count author; do
# 统计行数并按格式输出
git log --author="$author" --pretty=tformat: --numstat | awk -v auth="$author" -v cnt="$count" '
{ add += $1; subs += $2; }
END { printf "%-15s %8d %10d %10d %10d\n", auth, cnt, add, subs, add - subs; }
'
done
这里用到了 printf 的格式化控制,%-15s 表示左对齐占 15 字符宽度,适合存放作者姓名;%8d 或 %10d 则是数字右对齐,方便阅读量级差异。
脚本拆解:每一行都有意义
为了知其然更知其所以然,我们逐行解析脚本逻辑。
1. 获取作者与提交次数
使用 git shortlog -sn 命令:
s(–summary):只输出'提交次数 + 作者名',隐藏具体提交信息。n(–numbered):按提交次数从多到少排序,让核心贡献者一目了然。
2. 筛选作者的代码变更
通过 git log --author="$author" --pretty=tformat: --numstat 获取当前作者的代码变更详情:
--author="$author":只筛选当前作者的提交。--pretty=tformat::清空提交的元信息(如 commit hash、时间),只保留代码行数变化。--numstat:输出每行变更的'新增行数 删除行数 文件路径'。
3. 累加并计算总行数
利用 awk 进行数据处理:
- / :将 Shell 变量传递给 。

