📅  最后修改于: 2023-12-03 14:55:55.753000             🧑  作者: Mango
在一个多人协作的项目中,需要时常统计每个用户在 Git 仓库中的代码贡献情况,以便评估每个用户的工作量和工作质量。本文将介绍如何使用 Shell-Bash 脚本快速统计每个用户在 Git 仓库中的代码行数。
Git 提供了 git log
命令,可以列出 Git 仓库中的提交日志。我们可以通过解析这些提交日志来计算每个用户在 Git 仓库中的代码行数。
具体实现思路如下:
使用 git log
命令列出 Git 仓库中的提交日志,并限制时间范围以减少计算量。
git log --since=2021-01-01 --until=2022-01-01 --pretty="%H;%an;%ae;%ad;%s"
上述命令将列出 2021 年 1 月 1 日至 2022 年 1 月 1 日之间的提交日志,并按照以下格式输出:
commit_id;author_name;author_email;author_date;subject
使用 Bash 的循环和条件语句,遍历每个提交日志,解析出每个用户的代码行数,并保存到文件中。
while read line; do
commit_id=$(echo "$line" | cut -d";" -f1)
author_name=$(echo "$line" | cut -d";" -f2)
author_email=$(echo "$line" | cut -d";" -f3)
author_date=$(echo "$line" | cut -d";" -f4)
subject=$(echo "$line" | cut -d";" -f5)
if [[ -n "$commit_id" ]]; then
git diff --shortstat $commit_id $commit_id^ | grep -Eo '^[0-9]+' | paste -sd+ - | bc >> code_lines.txt
echo "$author_name;$author_email;$author_date;$subject"
fi
done < <(git log --since=2021-01-01 --until=2022-01-01 --pretty="%H;%an;%ae;%ad;%s")
上述代码将对每个提交日志执行 git diff
命令,计算出每个用户新增的代码行数和删除的代码行数,然后相加得到该用户在该提交中的代码行数。
最后将计算出的代码行数保存到 code_lines.txt
文件中。
统计每个用户的总代码行数,并输出到控制台或文件中。
awk 'BEGIN {FS=";"} { lines[$1]+=$2 } END {for (name in lines) {print name,lines[name]}}' code_lines.txt
上述代码将使用 awk 命令统计每个用户的总代码行数,并将结果输出到控制台。
将上述三个代码段复制到一个脚本文件中,然后执行该脚本即可。
#!/bin/bash
# 列出 Git 仓库中的提交日志
git log --since=2021-01-01 --until=2022-01-01 --pretty="%H;%an;%ae;%ad;%s" > commit_logs.txt
# 遍历每个提交日志,解析出每个用户的代码行数,并保存到文件中
while read line; do
commit_id=$(echo "$line" | cut -d";" -f1)
author_name=$(echo "$line" | cut -d";" -f2)
author_email=$(echo "$line" | cut -d";" -f3)
author_date=$(echo "$line" | cut -d";" -f4)
subject=$(echo "$line" | cut -d";" -f5)
if [[ -n "$commit_id" ]]; then
git diff --shortstat $commit_id $commit_id^ | grep -Eo '^[0-9]+' | paste -sd+ - | bc >> code_lines.txt
echo "$author_name;$author_email;$author_date;$subject"
fi
done < commit_logs.txt
# 统计每个用户的总代码行数,并输出到控制台或文件中
awk 'BEGIN {FS=";"} { lines[$1]+=$2 } END {for (name in lines) {print name,lines[name]}}' code_lines.txt
使用以下命令执行脚本:
chmod +x git-lines.sh # 添加执行权限
./git-lines.sh # 执行脚本