{{< details >}}
- Tier: 基础版, 专业版, 旗舰版
- Offering: 私有化部署
{{< /details >}}
您可以使用 git fsck
来验证提交到仓库的所有数据的完整性。极狐GitLab 管理员可以:
- 手动触发项目的检查。
- 安排检查,以便自动运行所有项目的检查。
- 从命令行运行检查。
- 运行一个 Rake 任务 来检查 Git 仓库,该任务可以用于对所有仓库运行
git fsck
并生成仓库校验和,以比较不同服务器上的仓库。
不是在命令行手动运行的检查通过 Gitaly 节点执行。有关 Gitaly 仓库一致性检查、某些禁用的检查以及如何配置一致性检查的信息,请参阅仓库一致性检查。
检查项目的仓库使用极狐GitLab UI
要使用极狐GitLab UI 检查项目的仓库:
- 在左侧边栏底部,选择 管理员。
- 选择 概览 > 项目。
- 选择要检查的项目。
- 在 仓库检查 部分,选择 触发仓库检查。
检查是异步运行的,因此可能需要几分钟才能在项目页面的 管理员 区域中看到检查结果。如果检查失败,请参阅该怎么办。
启用所有项目的仓库检查
与其手动检查仓库,可以配置极狐GitLab 定期运行检查:
- 在左侧边栏底部,选择 管理员。
- 选择 设置 > 仓库。
- 展开 仓库维护。
- 启用 启用仓库检查。
启用后,极狐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
。要定位仓库:
- 转到仓库的存储位置:
- 对于 Linux 软件包安装,仓库默认存储在
/var/opt/gitlab/git-data/repositories
目录中。 - 对于极狐GitLab Helm chart 安装,仓库默认存储在 Gitaly pod 内的
/home/git/repositories
目录中。
- 对于 Linux 软件包安装,仓库默认存储在
- 识别包含仓库的子目录。
-
运行检查。例如:
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
。
如果定期仓库检查导致误报,您可以清除所有仓库检查状态:
- 在左侧边栏底部,选择 管理员。
- 选择 设置 > 仓库。
- 展开 仓库维护。
- 选择 清除所有仓库检查。
故障排除
在进行仓库检查时,您可能会遇到以下问题。
错误: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
选项可以在命令行运行时抑制它们。