Git仓库大小分析:git count-objects中size与size-pack差异解析
Git count-objects 输出项详解(重点解析 size 与 size-pack)
git count-objects -vh 是用来查看Git仓库对象存储细节的命令,下面逐个解释你输出里的每个字段:
- count: 未被打包的松散对象数量,这里是343个。这类对象是单独存在的文件,还没被Git合并到pack压缩文件中。
- size: 所有未打包松散对象的总磁盘占用,1.34 MiB。这些单个文件没有经过压缩,所以是原始大小的总和。
- in-pack: 已经被打包到pack文件中的对象总数,21183个。
- packs: 当前仓库里的pack压缩文件数量,3个。pack文件是Git用来批量压缩存储对象的容器,会把多个对象合并并压缩。
- size-pack: 所有pack文件的总磁盘占用,107.51 MiB。pack里的对象不仅会被常规压缩,还会用delta压缩(只存储对象之间的差异内容),所以这个大小远小于所有打包对象的原始大小总和。
- prune-packable: 可被清理的松散对象数量,16个。这些对象已经被打包到pack文件里了,属于冗余的副本,删除不会影响仓库完整性。
- garbage: 无引用的垃圾对象数量,0个。这类对象没有被任何分支、标签或提交指向,完全是无用的。
- size-garbage: 垃圾对象的总大小,0 bytes。
size 与 size-pack 的核心差异
- size聚焦的是未打包的临时/新增对象,是未压缩的单个文件大小之和,通常是最近操作产生的内容,还没被Git自动打包。
- size-pack聚焦的是已归档的核心对象,是经过Git高效压缩(含差异压缩)后的总大小,这是仓库占用磁盘空间的主要部分。
- 两者相加基本就是仓库所有对象的总磁盘占用(忽略少量Git元数据文件)。
如果想优化仓库空间,可以执行 git gc 命令,它会自动把松散对象打包成pack文件,清理可删除的冗余对象,有效减少磁盘占用。
内容的提问来源于stack exchange,提问作者fschn90
相关产品推荐
相关产品推荐

