有时候我们在工作中需要做一些代码量的统计,这时候我们可以借助Git的git log
配合--numstat
选项来统计已提交的代码总量,包括新增和删除的行数。
1、统计整个项目从某一时间点到另一时间点的总行数变化
# 统计从 'start_date' 到 'end_date' 时间段内所有提交的代码行数变动
# 例:统计2024-01-01 到 2024-03-12 (时间自行设置替换即可)
git log --since="2024-01-01" --until="2024-03-12" --pretty=format:'' --numstat \
| grep -v '^$' \
| awk '
{
add += $1;
subs += $2;
loc += $1 - $2
}
END {
printf "Total added lines: %s, removed lines: %s, net lines: %s\n", add, subs, loc
}'
2、统计某个特定作者在这个时间段内的代码量 -author
# 统计指定作者 'username' 在同一时间段内的代码行数变动
git log --author="username" --since="YYYY-MM-DD" --until="YYYY-MM-DD" --pretty=format:'' --numstat \
| grep -v '^$' \
| awk '
{
add += $1;
subs += $2;
loc += $1 - $2
}
END {
printf "Author: %s, added lines: %s, removed lines: %s, total lines: %s\n", "username", add, subs, loc
}'
# YYYY-MM-DD 自行替换时间
# awk 脚本读取每一行输出,并累加 $1(添加行数)和 $2(删除行数),最后输出累计的结果。
# grep -v '^$'是用来过滤掉空行,因为--numstat产生的输出中有时会有空白行。
3、统计某个开发人员在某个分支上已提交的代码总量
# 替换 'developer_name' 为你要查询的人员姓名,
# 替换 'branch_name' 为你想要统计的分支名
# 统计增删
git log --author='developer_name' --pretty=tformat: --numstat --branches=branch_name |
awk '
NF == 3 {plus+=$1; minus+=$2}
END {printf "该开发人员在分支 '%s' 上共增加了 %s 行代码,删除了 %s 行代码。\n", "branch_name", plus, minus}
'
# 若要进一步计算净增行数
git log --author='developer_name' --pretty=tformat: --numstat --branches=branch_name |
awk '
NF == 3 {plus+=$1; minus+=$2}
END {net = plus-minus; printf "该开发人员在分支 '%s' 上共增加了 %s 行代码,删除了 %s 行代码,净增 %s 行代码。\n", "branch_name", plus, minus, net}
'
注意:
- 使用
--author
参数指定了开发人员的名字。- 使用
--branches
参数限制只考虑指定分支的提交。--pretty=tformat:
是为了不让Git输出额外的信息,仅仅显示--numstat
的结果。--numstat
输出每次提交涉及的文件行数变化详情,每行格式为“添加行数 删除行数 文件路径”。- awk 脚本读取每一行输出,并累加
$1
(添加行数)和$2
(删除行数),最后输出累计的结果。