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

如何统计本地Git仓库中特定文件占用的总存储空间?

计算Git仓库中特定文件的总占用空间及移除历史后的缩减规模

一、统计文件在提交历史中的总大小

要算出该文件所有历史版本的总字节数,用以下命令(替换<file-path>为你的文件路径):

git log --all --objects --follow -- <file-path> | grep -E '^[0-9a-f]{40}' | git cat-file --batch-check='%(objectsize)' | awk '{sum += $1} END {print sum " bytes"}'
  • --follow:追踪文件的重命名历史(如果文件曾被改名,必须加这个参数才不会漏算旧版本)
  • 这条命令会遍历所有包含该文件的提交,提取每个版本的对象哈希,查询每个对象的大小后求和。

二、加上工作树中当前文件的大小

如果该文件还存在于当前工作区,把上面的结果加上工作文件的大小:

# 一键计算总占用空间
history_size=$(git log --all --objects --follow -- <file-path> | grep -E '^[0-9a-f]{40}' | git cat-file --batch-check='%(objectsize)' | awk '{sum += $1} END {print sum}')
worktree_size=$(du -b <file-path> | awk '{print $1}')
total_size=$((history_size + worktree_size))
echo "Total occupied space: $total_size bytes ($((total_size/1024/1024)) MB)"

三、验证移除文件后仓库的实际缩减空间

上面的统计是理论值,实际清理后仓库的缩减规模可以通过以下步骤验证:

  1. 先备份原仓库(重要,防止操作失误):
    cp -r your-repo your-repo-backup
    
  2. 移除文件的所有历史记录:
    推荐用git filter-repo(Git官方已弃用git filter-branch,filter-repo更稳定高效):
    cd your-repo
    git filter-repo --path <file-path> --invert-paths
    
  3. 清理Git垃圾数据:
    git reflog expire --expire=now --all
    git gc --prune=now --aggressive
    
  4. 对比备份仓库和处理后仓库的大小:
    du -sh your-repo your-repo-backup
    
    两者的差值就是实际能缩减的空间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:52:38