我收到了一封gitlab的警告邮件,上面写着"一个项目的上次存储库检查失败了"。我确实在Gitlab管理面板中检查了错误,"上次存储库检查(刚才)失败"。查看'repocheck.log'文件中的错误信息。"根据Gitlab管理面板中的建议,我已经检查了repocheck.log文件,错误如下:
"无法读取存储库:错误:无法读取0f188244898707e6090498bc03aafd8ac25e776e从对象数据库解析提交0f188244898707e6090498bc03aafd8ac25e776e提交图失败错误:无法读取4ab7111f3f8f1083cee8e33ec033c18edfefb0e9">
上周的另一个回购也发生了同样的情况。即使有类似的错误信息,它还没有解决。试图在另一个gitlab实例中克隆相同的repo以重新创建问题,但repo检查似乎没有问题。找不到合适的解决方案。有谁能帮帮忙吗?
这似乎是一个活跃的问题:https://gitlab.com/gitlab-org/gitaly/-/issues/2359#note_966195929这个问题是几年前的问题,但我链接到的注释,从今天开始更新,包括修复和解决方案的信息。
在任何情况下:commit-graph
是一个相对较新的特性,由于它是对打包数据的索引形式,因此可以重新创建它。因此,损坏的repo可以很容易地修复,而不会丢失数据。
我现在已经遇到并修复了这个问题两次,我在论坛上找到了修复:
- 在实例的管理面板中查找所有失败的repos: https://your-gitlab-instance/admin/projects?last_repository_check_failed=1 从该页打开repo并复制其Gitaly相对路径,它应该看起来像
@hashed/d4/73/c530f048efdf2711df6fa15198ff48003583303624f8b97c174fadc2cab5e582.git
注意!下面的命令应该以运行gitlab的用户身份运行。你可以这样做与
sudo su [username]
,在我的情况下,用户名是git。它们将与sudo
一起工作,但它可能会创建gitlab用户无法访问的文件或文件夹。
- 使用repo的相对路径运行
fsck
命令(这应该输出与/var/log/gitlab/gitlab-rails/repocheck.log
文件相同的文本):
/opt/gitlab/embedded/bin/git -C /var/opt/gitlab/git-data/repositories/[Gitlab relative path] fsck
# example
/opt/gitlab/embedded/bin/git -C /var/opt/gitlab/git-data/repositories/@hashed/d4/73/c530f048efdf2711df6fa15198ff48003583303624f8b97c174fadc2cab5e582.git fsck
- 使用repo的相对路径运行
gc
命令。这可能需要一分钟才能完成。
/opt/gitlab/embedded/bin/git -C /var/opt/gitlab/git-data/repositories/[Gitlab relative path] gc
# example
/opt/gitlab/embedded/bin/git -C /var/opt/gitlab/git-data/repositories/@hashed/d4/73/c530f048efdf2711df6fa15198ff48003583303624f8b97c174fadc2cab5e582.git gc
- 从步骤3开始再次运行
fsck
命令,检查命令是否成功 在步骤2的repo页面上,单击蓝色的触发存储库检查按钮
可以这样复制:
- 访问提交图:Project侧边栏/Repository/graph
- 通过重写历史记录来删除一个可见的提交:
git checkout <branch>
git reset head~1
git commit -am "Replace last commit with a new one"
git push --force
- 刷新步骤1页面
现在GitLab将发送给你" GitLab项目的提交图未能通过上次存储库检查">
按计划间隔运行存储库检查。我认为这是一个bug,管理员和维护者得到警告,因为没有什么错。请参阅Anders Bandholm链接的GitLab问题以获取更多详细信息。