{{< details >}}

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: 私有化部署

{{< /details >}}

您可以使用 git fsck 来验证提交到仓库的所有数据的完整性。极狐GitLab 管理员可以:

  1. 手动触发项目的检查
  2. 安排检查,以便自动运行所有项目的检查。
  3. 从命令行运行检查
  4. 运行一个 Rake 任务 来检查 Git 仓库,该任务可以用于对所有仓库运行 git fsck 并生成仓库校验和,以比较不同服务器上的仓库。

不是在命令行手动运行的检查通过 Gitaly 节点执行。有关 Gitaly 仓库一致性检查、某些禁用的检查以及如何配置一致性检查的信息,请参阅仓库一致性检查

检查项目的仓库使用极狐GitLab UI

要使用极狐GitLab UI 检查项目的仓库:

  1. 在左侧边栏底部,选择 管理员
  2. 选择 概览 > 项目
  3. 选择要检查的项目。
  4. 仓库检查 部分,选择 触发仓库检查

检查是异步运行的,因此可能需要几分钟才能在项目页面的 管理员 区域中看到检查结果。如果检查失败,请参阅该怎么办

启用所有项目的仓库检查

与其手动检查仓库,可以配置极狐GitLab 定期运行检查:

  1. 在左侧边栏底部,选择 管理员
  2. 选择 设置 > 仓库
  3. 展开 仓库维护
  4. 启用 启用仓库检查

启用后,极狐GitLab 会定期对所有项目仓库和 wiki 仓库进行检查,以检测可能的数据损坏。每个项目每月检查不超过一次,新项目在至少 24 小时内不会被检查。

管理员可以配置仓库检查的频率。要编辑频率:

  • 对于 Linux 软件包安装,编辑 /etc/gitlab/gitlab.rb 中的 gitlab_rails['repository_check_worker_cron']
  • 对于基于源代码的安装,编辑 /home/git/gitlab/config/gitlab.yml 中的 [gitlab.cron_jobs.repository_check_worker]

如果任何项目的仓库检查失败,所有极狐GitLab 管理员将收到关于该情况的电子邮件通知。默认情况下,此通知每周在周日午夜发出一次。

可以在 /admin/projects?last_repository_check_failed=1 找到已知检查失败的仓库。

使用命令行运行检查

您可以使用命令行在 Gitaly 服务器 上运行 git fsck。要定位仓库:

  1. 转到仓库的存储位置:
    • 对于 Linux 软件包安装,仓库默认存储在 /var/opt/gitlab/git-data/repositories 目录中。
    • 对于极狐GitLab Helm chart 安装,仓库默认存储在 Gitaly pod 内的 /home/git/repositories 目录中。
  2. 识别包含仓库的子目录
  3. 运行检查。例如:

    sudo -u git /opt/gitlab/embedded/bin/git \
       -C /var/opt/gitlab/git-data/repositories/@hashed/0b/91/0b91...f9.git fsck --no-dangling
    

    错误 fatal: detected dubious ownership in repository 意味着您使用错误的账户运行命令。例如,root

如果检查失败该怎么办

如果仓库检查失败,请在磁盘上的 repocheck.log 文件 中找到错误:

  • 对于 Linux 软件包安装,在 /var/log/gitlab/gitlab-rails
  • 对于自编译安装,在 /home/git/gitlab/log
  • 对于极狐GitLab Helm chart 安装,在 Sidekiq pod 中的 /var/log/gitlab

如果定期仓库检查导致误报,您可以清除所有仓库检查状态:

  1. 在左侧边栏底部,选择 管理员
  2. 选择 设置 > 仓库
  3. 展开 仓库维护
  4. 选择 清除所有仓库检查

故障排除

在进行仓库检查时,您可能会遇到以下问题。

错误:failed to parse commit <commit SHA> from object database for commit-graph

您可以在仓库检查日志中看到 failed to parse commit <commit SHA> from object database for commit-graph 错误。如果您的 commit-graph 缓存过期,则会发生此错误。commit-graph 缓存是一个辅助缓存,对常规 Git 操作不是必需的。

虽然可以安全地忽略此消息,但请参阅议题 error: Could not read from object database for commit-graph 了解更多详情。

悬空提交、标签或 blob 消息

仓库检查输出通常包括必须修剪的标签、blob 和提交:

dangling tag 5c6886c774b713a43158aae35c4effdb03a3ceca
dangling blob 3e268c23fcd736db92e89b31d9f267dd4a50ac4b
dangling commit 919ff61d8d78c2e3ea9a32701dff70ecbefdd1d7

这在 Git 仓库中很常见。它们由例如强制推送到分支的操作生成,因为这会在仓库中生成一个不再由引用或其他提交引用的提交。

如果仓库检查失败,输出可能会包含这些警告。

忽略这些消息,并从其他输出中识别仓库检查失败的根本原因。

极狐GitLab 15.8 及更高版本 不再在检查输出中包含这些消息。使用 --no-dangling 选项可以在命令行运行时抑制它们。