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

如何查看目录对Git仓库总大小的实际贡献(含历史与Git压缩)

如何计算Git仓库中vendor目录的实际历史+压缩后大小贡献

要准确评估vendor/目录对Git仓库总大小的真实影响——包括它的所有历史版本,以及Git自带的打包压缩机制带来的变化——你可以试试下面这几种方法,都是原生Git命令或者轻量工具,能拿到精确数据支撑你的讨论:

方法一:对比移除vendor前后的仓库打包大小

这是最直观的方法:通过临时移除仓库历史中所有vendor/相关的内容,对比处理前后的仓库打包大小差值,就是它的实际贡献。

步骤如下:

  1. 先备份原仓库(绝对重要,避免误操作破坏历史):
    git clone --mirror your-repo-url temp-repo-mirror
    cd temp-repo-mirror
    
  2. 移除所有历史中的vendor目录:
    推荐用Git 2.22+自带的git filter-repo(比旧的filter-branch更稳定可靠):
    git filter-repo --path vendor/ --invert-paths
    
  3. 计算处理后的仓库打包大小:
    先让Git完成全量打包压缩,再统计:
    git gc --aggressive --prune=now
    git count-objects -H
    
    记下输出里的size-pack值(这是打包压缩后的仓库总大小)。
  4. 回到原仓库做同样的打包统计:
    在你的原仓库目录执行:
    git gc --aggressive --prune=now
    git count-objects -H
    
  5. 计算差值:原仓库的size-pack减去处理后的size-pack,就是vendor/目录考虑历史和压缩后的真实大小贡献。

方法二:直接统计vendor目录所有历史对象的大小总和

如果你不想修改仓库,也可以直接遍历所有涉及vendor/的Git对象,计算它们的压缩后大小总和:

total_size=0
# 先找出所有历史中出现过的vendor下的文件
while read file; do
  # 遍历该文件的所有历史提交版本
  for commit_hash in $(git log --all --pretty=format:%H -- "$file"); do
    # 获取该版本文件的压缩后大小(Git存储的对象都是压缩后的)
    file_size=$(git cat-file -s "$commit_hash:$file")
    total_size=$((total_size + file_size))
  done
done < <(git log --all --pretty=format: --name-only -- vendor/ | sort -u)

# 转换为MB单位输出
echo "$((total_size / 1024 / 1024)) MB"

这个结果会略大于方法一的差值(因为Git打包时会自动去重共享内容),但已经非常接近真实贡献值,适合快速估算。

方法三:使用git-sizer工具(更全面的分析)

如果需要更详细的维度——比如vendor目录里哪些文件贡献最大、历史版本的重复率、松散对象占比等——可以用官方推荐的git-sizer工具:

  1. 安装完成后,在仓库目录执行:
    git-sizer --verbose --path=vendor/
    
    它会输出vendor/目录相关的所有大小统计,数据非常细致,能帮你定位具体的大小来源。

这些方法都能帮你拿到精准的数据,用来支撑你关于vendored code对仓库大小影响的讨论。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:52:57