【问题标题】:Recovering GitLab repos from the server-side directories从服务器端目录恢复 GitLab 存储库
【发布时间】:2019-07-21 12:36:18
【问题描述】:

我在 Ubuntu 16 VPS 上运行 GitLab-CE,但由于一些 nginx 问题和更普遍的问题,我最终无法在我的服务器上登录 GitLab。由于无论如何我都必须擦除服务器,所以我想我只需备份 /var/opt/gitlab/git-data/repositories/ 文件夹,并希望在以后通过新的 GitLab 安装恢复这些文件夹时获得最好的结果。

以后再说吧。我现在在 Ubuntu 18.04 上安装了 GitLab-EE,即 Omnibus 版本。我将文件夹从 /var/opt/gitlab/git-data/repositories/username/ 从备份移动到新安装。这些文件夹分别命名为reponame.gitreponame.wiki.git。我也正确设置了文件权限。

唯一明显不同的是:

  1. 用户 git 属于在新服务器上创建的新 repo 上的组 git,但旧的用户组 root 和用户 git

  2. 在执行ls -al 时,新创建的repo 具有以下钩子

hooks -> /opt/gitlab/embedded/service/gitlab-shell/hooks/

虽然旧的 hooks.old.1528595819/ 只有一个关于钩子的自述文件,但没有任何帮助。

在新的 GitLab 安装中恢复这些的机会有多大?我不能让hooks 成为所有这些的符号链接到/opt/gitlab/.../hooks/ 并更改所有者的组,因为这并不能让这些显示在网络界面上。

我最好的选择是什么?

【问题讨论】:

  • but I don't want to risk making anything worse with my current GitLab install 但是你有可靠的备份,还是没有?如果你这样做,那么为什么这会困扰你?你破坏的东西更多,然后你恢复并重试。
  • 我有一个 repos 的备份。我有 Linode 的快照。但根据经验,我知道这并不总是像恢复快照并重试那样简单。与拍摄时的情况相比,我已经恢复了一些快照。所以,如果有人知道,我宁愿得到实际的答案。如果没有,那我绝对会修补我的小心脏,看看是什么。
  • 更重要的是,如果我最终恢复到快照会浪费很多时间。如果没有必要,我宁愿不要浪费时间。
  • 但问题仍然存在:您为什么还要处理原始数据?为什么不在新实例上恢复并在那里玩呢?
  • 我没有一堆额外的 VPS 实例来做这件事。这是一个相当简单的问题。

标签: git ubuntu gitlab gitlab-ee


【解决方案1】:

我制定了一个比我想要的更耗时的解决方案,但它确实让我找回了所有文件。这就是我所做的,以防它对其他人有帮助。很多时候东西会在没有答案的情况下被放弃,如果你只是想找回你的文件,这可能会为你做。

  1. 将文件夹(名为 [repo name].git)复制到非服务器计算机上的文件夹中。将每个放在其自己的包含文件夹中。例如,sample.git 被放入一个名为 sample 的文件夹中。
  2. 在终端中转到该目录
  3. git init重新初始化repo
  4. 使用git reset --hard HEAD在本地恢复文件
  5. 将远程服务器设置为该 repo 的新分支并提交。现在文件在远程 GitLab 服务器上显示为可访问。

git init 步骤只是一个猜测,但这正是我们所需要的。

我仍然很想听听是否有更快的方法来批量更新服务器上的所有 repos,但取而代之的是,这可行。

【讨论】:

  • 我在寻找类似问题的解决方案时遇到了您的答案。不幸的是,它对我不起作用。我最终得到了一个空白的回购。但是,在找到您的答案后,我受到启发,进一步看了一下,并找到了这个页面:forum.gitlab.com/t/where-are-repo-files-stored/14892/3,一位名叫 Yama 的用户回答说 .git 目录实际上只是裸存储库。果然,将该目录复制到 PC 并在其上尝试 git,我可以读取日志。所以感谢您的回答,希望此评论对其他人有所帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
相关资源
最近更新 更多