GitLab CE:如何恢复或修复突然丢失的问题/合并请求的回购协议?

GitLab CE: How to restore or repair repos with issues / merge requests that are suddenly missing?

大约两年前,我在本地的 x86 Debian VM 中开始 运行ning GitLab CE,去年我决定将 GitLab CE 实例迁移到专用的英特尔 NUC 服务器。一切似乎都没有问题,我的 GitLab CE 实例是最新的(运行ning 13.4.2)。

不过我最近发现,一些被移动的存储库给出了“没有存储库!”访问他们的项目页面时出错,如果他们有任何问题板、合并请求等,这些也都消失了。但是您不会怀疑它,因为损坏的存储库与我一直使用的工作存储库一起出现在存储库列表中。

如果我不得不对这些损坏的回购进行推理,那将是他们最后一次 activity 一年多以前,除了最初的推送之外没有对他们进行任何推送,或者如果更改提出、创建问题或创建合并请求,这实际上是一年多以前的事了。

其中一些损坏的回购协议相当大,有很多历史,而其他的则非常小(实际上只是跟踪对 shell 脚本的更改),所以我认为回购协议大小本身没有任何意义用它来做。

如果我 运行 GitLab 诊断检查 sudo gitlab-rake gitlab:check,除了“散列存储”之外的一切看起来都不错:

All projects are in hashed storage? ... no
  Try fixing it:
  Please migrate all projects to hashed storage

但是 运行ning sudo gitlab-rake gitlab:storage:migrate_to_hashed 似乎没有完成(仪表板中有六个失败的作业),并且 运行 再次执行“gitlab:check”仍然表明这个“散列存储”问题。我也试过 运行ning sudo gitlab-rake gitlab:git:fscksudo gitlab-rake cache:clear 但这些命令似乎没有什么区别。

幸运的是,我的机器上有所有丢失的存储库的最新版本,事实上,我还有原始 VM 运行ning GitLab CE 12.8.5(略微过时的副本回购。)

所以我的问题是:

  1. 是否可以“修复”我当前实例上损坏的存储库?我怀疑我可以将这些存储库的本地副本“重新推送”回我的服务器,但我真的不想丢失任何元数据,如问题/合并请求等。
  2. 有什么办法可以解决“并非所有项目都在哈希存储中”的问题吗? (同样,migrate_to_hashed 任务未能完成。)
  3. 我能做一些像“备份”、“检查/调整备份”、“恢复备份”之类的事情来修复损坏的存储库,或者至少修复元数据吗?

提前致谢。

好的,我想我明白发生了什么事了。

我找到了 this thread on the GitLab User Forums

显然这里的场景是:

  1. 在“散列存储”
  2. 中有一个 GitLab 实例 not
  3. 备份您的存储库
  4. 恢复您的存储库(到同一台服务器或迁移到另一台服务器)
  5. 尝试自动或手动将您的存储库更新为“散列存储”
  6. 您现在会发现任何带有“ci 运行ner”(持续集成 运行ner)的 repo 现在将被列为“NO REPOSITORY!”并且完全不可用,因为“散列存储”迁移过程将失败

解决方法是:

  1. 重置 运行GitLab 文档this article中列出的注册令牌
  2. Re-run sudo gitlab-rake gitlab:storage:migrate_to_hashed 过程
  3. 后台作业完成后,运行 sudo gitlab-rake gitlab:check 确保输出包含消息:
All projects are in hashed storage? ... yes

如果成功,标有“NO REPOSITORY!”的项目现在应该完全恢复了。

了解您是否需要 运行 这个过程的关键是如果您:

  1. 以管理员身份登录您的 GitLab CE 实例
  2. 进入管理区
  3. Monitoring->Background Jobs->Dead
  4. 下查看
  5. 并查看名为
  6. 的工作
hashed_storage:hashed_storage_project_migrate

有错误

OpenSSL::Cipher::CipherError: