首页/开发/Git 与协作速查/定位历史中的大文件
进阶与大仓实践69 条

定位历史中的大文件

用 rev-list --objects 列出全部对象并交给 cat-file --batch-check 统计大小,是找出「历史里是谁把仓库撑大」的常规手段。

Git 与协作速查开发更新于 2026-10-12
用途统计各 blob 体积并找出占用大户
工具组合rev-list --objects --all + cat-file --batch-check
后续filter-repo 清理或迁移 LFS

统计脚本(bash)

统计脚本(bash)
git rev-list --objects --all \
  | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \
  | awk '$1 == "blob" {print $3, $4}' \
  | sort -nr | head -30
输出包含路径(%(rest)),可直接看出是哪个目录的历史文件;删除前先确认是否仍被引用。

易错点

  • 几百 GB 的历史扫描耗时明显,可在低峰期执行并重定向到文件
  • 路径列的显示依赖对象树遍历,重命名历史下可能显示旧路径

数据来源与参考

  • Git 官方文档:git-rev-list(--objects)
  • Git 官方文档:git-cat-file(--batch-check)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌