首页/开发/Git 与协作速查/git maintenance 例行维护
进阶与大仓实践69 条

git maintenance 例行维护

统一的大仓维护入口:注册仓库后按天/小时执行 gc、commit-graph、prefetch、incremental-repack 等任务,替代手工跑 gc。

Git 与协作速查开发更新于 2026-10-13

git maintenance 是什么

git maintenance 是统一的大仓维护入口:把仓库注册进维护列表后,由系统调度器按小时或按天执行一组后台任务(提交图、预取、增量打包、垃圾回收等),替代「每个仓库各写一份 cron 手动跑 gc」的做法,注册列表全局可查、可停止。

基本信息

注册git maintenance register 把当前仓库加入全局维护列表
手动执行git maintenance run --task=<任务名>
启动调度git maintenance start(Linux/macOS 写 cron,Windows 用计划任务)
停止调度git maintenance stop 暂停调度,保留注册
常用任务gc、commit-graph、prefetch、incremental-repack、pack-refs

典型使用场景

  • 单机多仓库:活跃仓库统一托管维护,不用逐仓配 cron。
  • 大仓提速:commit-graph 与 incremental-repack 让日志、合并基计算更快。
  • 预取远端:prefetch 在空闲时段把远端更新拉到隐藏引用,正式操作更流畅。
  • 替代手工 gc:把清理与打包交给调度,避免忘记或重复执行。
  • 迁移过渡:原来散落的 cron gc 统一收编到维护列表,方便审计。

常用示例

常用示例
git maintenance register                      # 把当前仓库纳入全局维护列表
git maintenance run --task=commit-graph       # 重建提交图(加速日志与合并基)
git maintenance run --task=incremental-repack # 增量合并对象包
git maintenance run --task=prefetch           # 预取远端更新到隐藏引用
git maintenance start                         # 交给系统计划任务按调度执行
git maintenance stop                          # 暂停调度(保留注册)

任务对照

任务作用关注点
gc清理不可达对象并打包与保留期 pruneExpire 相关
commit-graph预计算提交图加速 log 与 merge-base
prefetch后台预取远端更新占用网络与远端负载
incremental-repack增量合并对象包磁盘 IO 较多
pack-refs引用打包成 packed-refs引用很多时收益大
执行时间选在空闲时段;机械盘或 CI 容器里跑后台维护可能拖慢构建,先评估环境再启用,start 之前规划好各仓库频率。任务也可以手动单跑(run --task=),调试或临时维护时不必等调度窗口。

易错点

  • 在机械盘或 CI 容器里启用后台维护,构建高峰被 IO 抢占;评估磁盘与时段后再启用。
  • 注册很多仓库后维护任务叠加(多仓同时跑重任务),按错峰规划频率。
  • 用 maintenance 接管后仍保留旧的 cron gc,任务重复执行浪费资源;迁移前清掉旧任务。
  • prefetch 与备份窗口重合,磁盘与网络争用;把计划与备份时间错开。
  • 把 maintenance 当成备份手段:它只做本地整理,删掉的对象过保留期就真没了;关键引用仍要单独备份,重要仓库再加一份异地镜像更稳。

数据来源与参考

  • Git 官方文档:git-maintenance
  • Git 官方文档:git-config(maintenance.auto)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌