treesize可精确分析git仓库本地磁盘占用,支持扫描整个仓库(含.git)、单独分析.git目录、筛选历史大文件及对比分支切换空间变化。

如果您希望精确掌握Git仓库在本地磁盘上实际占用的空间,尤其是区分工作区、.git目录、未跟踪文件及历史对象的分布情况,则TreeSize可提供远超git count-objects或du命令的可视化深度分析。以下是针对Git仓库空间分析的具体操作路径:
一、扫描整个仓库目录(含.git隐藏文件夹)
TreeSize默认会递归扫描所有子目录,包括系统隐藏文件夹,因此能完整呈现Git仓库的物理存储构成。该方法可一次性揭示工作区文件、.git/object数据库、reflog、索引文件、hooks脚本等全部组件的实际磁盘开销。
1、打开TreeSize软件,点击左上角“扫描”按钮。
2、在弹出窗口中定位并选中包含.git子目录的仓库根文件夹(例如D:\projects\my-app)。
3、勾选“包含隐藏文件和文件夹”选项(确保.git目录被纳入扫描范围)。
4、点击“确定”开始扫描,等待进度条完成。
5、扫描完成后,在左侧树状结构中展开目标仓库路径,重点关注.git/objects、.git/index、.git/logs及根目录下大型源文件(如node_modules、dist、assets)。
二、单独扫描.git目录进行精细化溯源
Git仓库的体积膨胀往往源于.git/object中累积的松散对象或打包文件(packfiles),单独分析该目录可快速识别冗余提交、大文件历史残留或未清理的rebase痕迹。此方式跳过工作区干扰,聚焦版本控制系统本身的存储效率。
1、在文件资源管理器中导航至仓库路径,进入.git文件夹(需提前在文件夹选项中启用“显示隐藏的项目”)。
2、将该.git文件夹拖入TreeSize主界面,或点击“扫描”→“选择文件夹”→手动定位。
3、扫描结束后,观察右侧平铺图中objects与packs子目录的色块占比;特别注意.git/objects/info/alternates是否存在外部引用。
4、右键点击可疑的大尺寸pack文件(如pack-*.pack),选择“打开所在文件夹”,确认其是否关联已废弃分支或误提交的二进制资产。
三、使用TreeSize过滤器识别大文件历史痕迹
即使已从当前工作区删除了大文件,其原始内容仍可能保留在.git/object中,持续占用空间。TreeSize的文件类型与大小筛选功能可辅助定位这类“幽灵文件”,为后续git filter-repo或BFG清理提供依据。
1、完成仓库根目录扫描后,点击顶部工具栏的“筛选器”按钮。
2、设置条件:文件大小“大于”10MB,文件扩展名“包含”.zip|.iso|.psd|.mov|.mp4等高风险类型。
3、应用筛选后,检查结果列表中的路径是否出现在.git/objects下(如.git/objects/ab/cdef123...);若存在,说明该文件曾被提交且未彻底清除。
4、记录对应SHA-1哈希前缀(如ab/cdef123),结合git cat-file -t ab/cdef123验证对象类型,确认是否为blob大文件。
四、对比不同分支检出状态下的空间变化
频繁切换分支可能导致index与worktree重复缓存,或引发稀疏检出残留。通过TreeSize两次扫描同一仓库在不同分支HEAD下的快照,可量化分支切换带来的临时空间波动,识别异常增长点。
1、在命令行中切换至目标分支(如git checkout main),等待检出完成。
2、启动TreeSize,扫描该仓库路径,保存结果为XML文件(菜单→文件→导出→XML)并命名为main_snapshot.xml。
3、执行git checkout develop,待检出完毕后,再次扫描同一路径,导出为develop_snapshot.xml。
4、在TreeSize中依次加载两个XML文件,点击“比较”按钮,查看差异报告中新增/消失/大小变更的子目录项,重点关注.git/index与.git/shallow。











