重打包做什么
重打包把仓库里的松散对象与多个包文件合并成更少、更紧凑的包,减少文件数量和占用体积。常用组合是全量重打包并删除冗余包,再写位图索引以便服务端快速取回对象。大仓库可以改用维护命令做增量重打包,避免每次都全量重算。
基本信息
| 全量组合 | -a 与 -d 搭配,全量重打包并删除冗余包 |
|---|---|
| 位图索引 | -b 写入位图,便于服务端取回对象 |
| 重算压缩 | -f 重新计算差异压缩,耗时更长 |
| 效果核对 | git count-objects -vH 查看对象数与体积 |
| 增量方式 | 可用维护命令执行增量重打包 |
典型使用场景
- 对象目录碎片过多、克隆速度下降时做一次整理
- 服务端仓库为加快取回对象而生成位图索引
- 历史清理或大文件处理之后重新打包回收空间
- 维护窗口内安排一次全量重打包
- 排查体积异常时先看对象统计,再决定是否需要重打包
常用示例
常用示例
git repack -adb # 全量重打包并写位图索引
git repack -Ad --quiet # 静默执行全量重打包
git count-objects -vH # 查看对象数量与占用体积
git maintenance run --task=incremental-repack # 增量重打包,适合大仓库常用选项
| 选项 | 作用 | 使用建议 |
|---|---|---|
| -a | 全量重打包 | 与 -d 组合使用 |
| -d | 删除冗余包 | 用于释放空间 |
| -b | 写位图索引 | 服务端仓库建议开启 |
| -f | 重算差异压缩 | 大仓库上耗时长,谨慎使用 |
重打包是重活:几十 GB 的仓库先在低峰期试跑,并观察磁盘余量,打包过程会临时占用额外空间。
日常维护更适合用维护命令做增量重打包,全量重打包留给历史整理或体积异常这类明确的时机。
重打包只影响对象在磁盘上的存放方式,不改变提交内容与历史结构。完成后用对象统计对比前后数据,就能确认整理是否生效。