我有一个自托管的 gitlab 实例,突然我的一个项目发送电子邮件告诉我 repo 检查失败。
我gitlab-15.0.0-ee
通过docker运行。我检查了日志文件repocheck.log
,内容如下:
E, [2022-06-07T19:08:10.599782 #435] ERROR -- : xxx/xxx: Could not fsck repository: dangling blob ed44e089d0eaf14fc152871bdca12aa6de01a5f1
dangling blob 4317819507d8e4e3ddcce6f3c01b8890e56cc157
dangling commit 2b1f190885dae6bbef0986cd50bc61c790331312
dangling blob 0f7c7218e71e1bd8b964184e149c214734d41944
dangling blob 6f16132326f43f1fd3a9a9cd717830643a162c8a
dangling commit 3b87a380a8095fe83fed257fd89e178323b89bea
dangling commit 14ca539d07483fc309f94cea685fc893a3efaf51
dangling commit 3cf64b574d2ecbc4ffe06559f9495db22bb5f2c9
dangling blob 535b94cb0a9048bbe45eb35ba53a02fe795be823
dangling commit 6778eef6143982b0d96f2934e515b36254e9a31f
dangling commit 0294e6bca9f2a5cacd7bbea61c62e5b5d92eb98f
dangling blob 4144f7437938ea8b0fe5ce6c8a498995b4f96f7c
dangling blob b64cd7abaa200ac4fea060b0dfb8542e260cb301
dangling blob 90545fea55b5e5c1f6245281ebac02b1dd8bfd04
error: Could not read 0957f8065b8fecfa80005eafa673a2a8b67ddbed
failed to parse commit 0957f8065b8fecfa80005eafa673a2a8b67ddbed from object database for commit-graph
error: Could not read 0a70090f6519febb2edbd9c416b5dff46d92d1a1
failed to parse commit 0a70090f6519febb2edbd9c416b5dff46d92d1a1 from object database for commit-graph
error: Could not read 126be254518dfd5b29a553fcfe7843787cbeed08
....
并且该文件有大约 200 个提交未出现在提交图中。
在我的本地存储库中,大多数提交仍然存在,并且确实无法访问,因此git gc
服务器上删除了本地存储库中仍然存在的那些提交。我似乎没有丢失合并请求,所以我不明白为什么 gitlab 认为这是一个问题。
可悲的是官方文档repocheck.log
除了告诉找到文件或单击之外,对于该做什么非常模糊清除所有存储库检查如果错误仍然存在。这根本没有帮助,因为即使点击清除所有存储库检查,我仍然收到相同的错误。那么 gitlab 实际上在测试什么,为什么会失败?
答案1
查找所有在 GitLab 收到的链接“在 GitLab 管理面板中查看受影响的项目”上失败的存储库 http://yourgitlab_link/admin/projects?last_repository_check_failed=1
检查
/var/log/gitlab/gitlab-rails/repocheck.log
在项目管理区触发“触发存储库检查”时生成的文件。如果文件为空,则再次手动触发存储库检查。此步骤并不那么重要,无论文件是否为空,因为您将获得与下面描述的命令 fsck 类似的输出。打开特定项目菜单->管理->项目->你的项目并搜索“Gitaly 相对路径”
@hashed/48/b3/48b361d46638bfa4eee090c158a750a69c7beec3a62e703e2801125551b1b157.git
转到 docker 控制台(连接到容器)或 Gitlab Omnibus Server 的控制台并在该特定存储库命令上运行 fsck 命令。确保
git
在综合安装中以正确的用户身份运行该命令,否则将使用所有者创建文件root
,而 gitlab 无法写入:/opt/gitlab/embedded/bin/git -C /var/opt/gitlab/git-data/repositories/@hashed/48/b3/48b361d46638bfa4eee090c158a750a69c7beec3a62e703e2801125551b1b157.git fsck
并检查是否存在类似以下错误error: Could not read 098b53ffbe581e25b… failed to parse commit 098b53ffbe581e25b… from object database for commit-graph
现在运行垃圾收集器 gc
/opt/gitlab/embedded/bin/git -C /var/opt/gitlab/git-data/repositories/@hashed/48/b3/48b361d46638bfa4eee090c158a750a69c7beec3a62e703e2801125551b1b157.git gc
并使用 fsck 再次检查存储库
/opt/gitlab/embedded/bin/git -C /var/opt/gitlab/git-data/repositories/@hashed/48/b3/48b361d46638bfa4eee090c158a750a69c7beec3a62e703e2801125551b1b157.git fsck
错误和失败应该被清除再次运行“触发存储库检查”以检查存储库检查是否已成功通过。 如果成功,则此存储库不应位于未通过存储库检查的存储库列表中(在 GitLab 管理面板中查看受影响的项目)或 http://yourgitlab_link/admin/projects?last_repository_check_failed=1
来源:https://forum.gitlab.com/t/gitlab-projects-failed-their-last-repository-check/19147/3
答案2
请参阅 GitLab 的文档:
管理 GitLab > ... > 存储库检查 > 使用命令行运行检查
(选择最适合您的安装的文档版本)