从服务器端目录恢复 GitLab 存储库

Recovering GitLab repos from the server-side directories

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

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

唯一明显不同的是:

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

  2. 在做ls -al时,新创建的repo有以下hooks

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

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

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

我最好的选择是什么?

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

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

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

我仍然很想知道是否有更快的方法来批量更新服务器上的所有存储库,但代替它,这个有效。