GitLab 统计 Commit 或 Tag 之间的代码变更行数
GitLab 统计 Commit 或 Tag 之间的代码变更行数
GitLab 统计 Commit 或 Tag 之间的代码变更行数
基本统计方法
1. 使用 git diff 快速统计
# 比较两个 commit 或 tag 之间的变更
git diff <起始commit/tag> <结束commit/tag> --shortstat
示例输出:
5 files changed, 120 insertions(+), 45 deletions(-)
2. 使用 git log 详细统计
Linux/macOS/Git Bash 版本
git log <起始commit/tag>..<结束commit/tag> --pretty=tformat: --numstat | \
awk '{ add += $1; subs += $2; loc += $1 - $2 } END {
printf "添加行数: %s\n删除行数: %s\n净变更行数: %s\n文件变更数: %s\n", add, subs, loc, NR
}'
Windows PowerShell 版本
$add = 0; $subs = 0; $files = 0
git log <起始commit/tag>..<结束commit/tag> --pretty=tformat: --numstat | ForEach-Object {
if ($_ -match "^(\d+)\s+(\d+)") {
$add += [int]$matches[1]
$subs += [int]$matches[2]
$files++
}
}
Write-Output "添加行数: $add"
Write-Output "删除行数: $subs"
Write-Output "净变更行数: $($add - $subs)"
Write-Output "文件变更数: $files"
高级统计选项
1. 按文件类型统计变更
git diff <起始commit/tag> <结束commit/tag> --numstat | \
awk 'NF==3 {print $3}' | \
sed 's/.*\.//' | \
sort | \
uniq -c | \
sort -nr
2. 生成详细变更报告
git diff <起始commit/tag> <结束commit/tag> --numstat | \
awk 'BEGIN {print "变更行数\t文件类型\t文件路径"}
NF==3 {split($3,a,"."); ext=a[length(a)];
print $1 "+," $2 "-", ext, $3}' | \
column -t -s $'\t'
GitLab API 方法
如果需要通过 API 获取这些信息:
# 获取项目ID
PROJECT_ID=<your-project-id>
# 使用GitLab Compare API
curl --header "PRIVATE-TOKEN: <your-access-token>" \
"https://gitlab.example.com/api/v4/projects/$PROJECT_ID/repository/compare?from=<起始commit/tag>&to=<结束commit/tag>"
API 响应会包含 diffs 数组,其中每个对象都有 new_path、old_path、diff 和 stats 等信息。
实用技巧
-
查看所有可用tag:
git tag --sort=-creatordate -
查找commit ID:
git log --oneline -n 20 -
统计特定作者的变更:
git log <起始commit/tag>..<结束commit/tag> --author="作者名" --pretty=tformat: --numstat | \ awk '{ add += $1; subs += $2 } END { print "添加:", add, "删除:", subs }' -
忽略空白变更:
git diff -w <起始commit/tag> <结束commit/tag> --shortstat
这些方法可以帮助你全面了解代码库在两个时间点之间的变更情况。

浙公网安备 33010602011771号