You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算Git仓库子文件夹的提交大小及整体仓库占比?

嘿,针对你关于Git仓库子文件夹大小分析的两个问题,我给你整理了实用的方法,结合你的foo/src和foo/test结构来讲解:

1. 计算Git仓库中子文件夹的提交生命周期大小 & 空间占用

Git是基于对象存储的,不是传统的文件夹结构,所以要统计子文件夹的相关大小,得过滤出所有和该文件夹相关的提交、对象来计算。

方法一:统计/test所有历史提交对应的文件大小总和(提交生命周期)

这个方法会遍历所有修改过/test的提交,累加每个提交里该文件夹下文件的大小:

  1. 先获取所有涉及/test修改的提交哈希:
    git log --all --pretty=format:"%H" -- test/
    
  2. 用组合命令直接计算这些提交中/test文件的总大小:
    git log --all --pretty=format:"%H" -- test/ | while read commit; do
      git diff-tree -r --no-commit-id --name-only $commit | grep "^test/" | while read file; do
        git cat-file -s $commit:$file
      done
    done | awk '{sum += $1} END {print "Total size of test/ files across all commits: " sum " bytes (" sum/1024/1024 " MB)"}'
    
    这个命令会逐个检查每个涉及/test的提交,提取出该提交里属于/test的文件,然后获取每个文件在该版本的大小,最后累加求和。

方法二:统计/test所有历史版本对象的总空间占用

如果想知道/test在Git对象数据库里的总存储空间(包括所有历史版本的文件,去重后的Blob大小),可以这么做:

  1. 先找出所有和/test相关的唯一Blob对象哈希:
    git rev-list --all --objects | grep "^test/" | awk '{print $1}'
    
  2. 统计这些Blob的总大小:
    git rev-list --all --objects | grep "^test/" | awk '{print $1}' | while read blob; do
      git cat-file -s $blob
    done | awk '{sum += $1} END {print "Total space used by test/ (all historical versions): " sum " bytes (" sum/1024/1024 " MB)"}'
    
    注意:Git会自动去重相同内容的文件,所以这个统计的是真正被/test占用的独特存储空间,不会重复计算相同内容的文件。
2. 计算/test对整体仓库大小的贡献占比

要算占比,我们需要先拿到仓库的总大小,再和/test的空间大小做对比:

  1. 先优化仓库存储(确保统计的是最优大小):
    git gc --aggressive
    
  2. 获取仓库的总存储大小(.git文件夹的大小就是仓库的实际占用空间):
    total_size=$(du -b .git/ | awk '{print $1}')
    
  3. 用上面方法获取/test的总空间大小,然后计算占比:
    # 获取test文件夹所有历史对象的总大小
    test_size=$(git rev-list --all --objects | grep "^test/" | awk '{print $1}' | while read blob; do git cat-file -s $blob; done | awk '{sum += $1} END {print sum}')
    # 计算占比(保留两位小数)
    percentage=$(echo "scale=2; ($test_size / $total_size)*100" | bc)
    echo "test/ folder contributes $percentage% of the total repository size ($test_size bytes out of $total_size bytes)"
    

小提示:如果你的仓库很大,这些命令可能会运行一段时间,耐心等一下就好~

内容的提问来源于stack exchange,提问作者user3915489

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:34:28