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​ 等信息。

实用技巧

  1. 查看所有可用tag:

    git tag --sort=-creatordate
    
  2. 查找commit ID:

    git log --oneline -n 20
    
  3. 统计特定作者的变更:

    git log <起始commit/tag>..<结束commit/tag> --author="作者名" --pretty=tformat: --numstat | \
    awk '{ add += $1; subs += $2 } END { print "添加:", add, "删除:", subs }'
    
  4. 忽略空白变更:

    git diff -w <起始commit/tag> <结束commit/tag> --shortstat
    

这些方法可以帮助你全面了解代码库在两个时间点之间的变更情况。

posted @ 2025-07-15 14:54  一翼诚  阅读(60)  评论(0)    收藏  举报