例行维护

极狐GitLab 支持并自动化您当前仓库中的内务管理任务,例如:

  • 压缩 Git 对象。
  • 删除无法到达的对象。

配置例行维护

Git push 后,极狐GitLab 会自动在仓库上运行 git gcgit repack

  • git gc 运行许多例行维护任务,例如:
    • 压缩 Git 对象,减少磁盘空间并提高性能。
    • 删除可能已经从对仓库的更改中创建的无法访问的对象,例如强制覆盖分支。
  • git repack 运行:
    • 根据配置时间运行增量重新打包,将所有松散对象打包到一个新的包文件中,并修剪现在冗余的松散对象。
    • 根据配置时间运行完整重新打包,将所有包文件和松散对象重新打包到一个新的包文件中,并删除旧的冗余的松散对象和包文件,还可以选择为新的包文件创建位图。

您可以更改发生的频率或将其关闭:

  1. 在顶部栏上,选择 菜单 > 管理员
  2. 在左侧边栏上,选择 设置 > 仓库
  3. 展开 仓库维护
  4. 例行维护 部分,配置例行维护选项
  5. 选择 保存修改

例行维护选项

提供以下例行维护选项:

  • 启用自动仓库例行维护:定期运行 git repackgit gc。如果您长时间禁用此设置,GitLab 服务器上的 Git 仓库访问会变慢,并且您的仓库会使用更多磁盘空间。
  • 增量重新打包时间:运行增量 git repack 之后的 Git 推送次数。
  • 完全重新打包时间:运行完整的 git repack 之后的 Git 推送次数。
  • Git GC 时间:运行 git gc 之后的 Git 推送次数。

例如,请参见以下场景:

  • 增量重新打包时间:10。
  • 完全重新打包时间:50。
  • Git GC 时间:200。

当:

  • pushes_since_gc 值为 50,运行 repack -A -l -d --pack-kept-objects
  • pushes_since_gc 值为 200,运行 git gc

例行维护还按照与 git gc 操作相同的时间表,从项目中删除未引用的 LFS 文件,为项目释放存储空间。

caution不鼓励在仓库文件夹中手动运行 git gcgit repack 命令。如果创建的包文件获得了不正确的访问权限(即由错误的用户拥有),浏览到项目页面可能会导致 404503 错误。

例行维护如何处理池仓库

池仓库的例行维护与标准仓库不同。它最终由 Gitaly RPC FetchIntoObjectPool 执行。

调用它的当前调用堆栈:

  1. Repositories::HousekeepingService#execute_gitlab_shell_gc
  2. Projects::GitGarbageCollectWorker#perform
  3. Projects::GitDeduplicationService#fetch_from_source
  4. ObjectPool#fetch
  5. ObjectPoolService#fetch
  6. Gitaly::FetchIntoObjectPoolRequest

如果需要,从 Rails 控制台 手动调用它,您可以调用 project.pool_repository.object_pool.fetch。这是一项可能需要长时间运行的任务,尽管 Gitaly 会在大约 8 小时后超时。

caution不要在池仓库中运行 git prunegit gc!这可能会导致依赖于相关池的“真实”仓库中的数据丢失。