Git 仓库体积病理诊断
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/diagnose-pathological-git-repository-size-before-migration-ci-or-contributor-onboarding。
技能介绍
要解决的具体问题
仓库体积失控时,最先遭殃的是日常操作:克隆可能跑上几十分钟甚至超时,git fetch 越来越慢,CI 里拉取代码这一步变成瓶颈,新贡献者入职第一天就被庞大的历史挡住。更隐蔽的损耗出现在 git gc 与历史遍历上——对象数量越多,垃圾回收和引用遍历的耗时就越长,且随历史增长非线性上升。
这类问题不会体现在 git status 或提交记录里,往往只留下「仓库越大越慢」的模糊感受。本技能要把这种感受转成可定位的证据,指出拖慢仓库的具体病理特征。
技能如何工作
本技能基于 git-sizer 对本地仓库做离线分析,核心步骤如下:
- 采集大小指标:统计对象总数、blob 体积分布、树体积分布、引用数量等维度。
- 标记病理阈值:对超出合理范围的指标给出警告,例如单个过大 blob、过大的树、引用过多、松散对象过多。
- 输出证据而非命令:结果是「哪个路径下的哪个对象超限」这类可复核的证据,清理建议应基于这些证据再提出。
文档同时给出方向性提示:若发现辅助信息(例如 CI 构建结果)大量挂在标签上,可考虑改用 git notes 记录,避免污染提交历史。
适用边界与注意点
- 分析对象必须是完整的非浅克隆,浅克隆缺少历史,体积指标会失真。
- 需要本地 Git 2.6 或更新版本,否则部分底层命令的输出格式可能无法被正确解析。
- 本技能只负责诊断与给出证据,重写历史、清理旧数据等破坏性操作应在证据基础上另行评估。
使用场景
- 准备把仓库迁移到新的 Git 服务,先盘点是否存在大 blob 或过大树,判断是否需要先裁剪历史再迁移。
- CI 流水线的 checkout 步骤频繁超时,需要统计对象数量和引用数量,定位拖慢代码拉取的病理特征。
- 新贡献者反馈克隆仓库耗时过久,要拿到具体证据确认是对象过多还是某个路径下的大 blob 导致。
- 计划执行 git gc 或历史清理前,先评估松散对象规模和遍历耗时,确定值得处理的体积来源。
适合人员
- 主导代码库迁移的工程师:需要在迁移前判断历史规模是否会让新平台上的克隆和拉取过慢。
- 维护 CI 流水线的 DevOps 工程师:要让 checkout 步骤稳定不超时,需要先拿到仓库体积的诊断证据。
- 负责新成员入职的技术负责人:需要确认克隆缓慢是仓库本身的问题,而不是简单归咎于新人环境配置。
- 管理大型代码库的仓库管理员:要在执行 gc 或清理前,明确哪些对象、路径和引用是体积与耗时的来源。