通过文件系统将 Gitlab 存储库复制到另一个 Gitlab 服务器

Posted

技术标签:

【中文标题】通过文件系统将 Gitlab 存储库复制到另一个 Gitlab 服务器【英文标题】:Copy Gitlab repositories to another Gitlab server through filesystem 【发布时间】:2019-11-09 08:49:34 【问题描述】:

我有一个带有一些存储库的 7.6.2 版本的 gitlab 服务器。现在这台服务器由最新的 Ubuntu 升级,它有一个空的 gitlab 服务器,版本为 12.0.1。我还有一个来自旧的gitlab 服务器的硬盘备份。

我需要将所有存储库从旧的 gitlab 服务器移动到新的。我尝试将.git 存储库从/var/opt/gitlab/repositories/user/ 复制到禁用散列存储库存储的新服务器的类似位置,但它没有效果。

我还尝试使用例如创建一个空存储库命名test 并从旧目录替换新服务器上的test.git 目录,但也没有效果。

我尝试在整个服务器文件系统中通过find 命令从创建的名为test.txt 的测试存储库中查找文件,但没有找到该文件(但该文件存在于gitlab 存储库中)。

我的问题是:gitlab 服务器的存储库存储在哪里以及如何将其从旧服务器硬盘的备份复制到新服务器文件系统(我无法同时运行 gitlab 的两个实例,因为我只有一个机器。由于某些原因,也无法将旧服务器作为虚拟机的 rootfs 运行备份。

更新。 它不是this question 的副本,因为我没有gitlab 制作的旧gitlab 服务器的备份,我只有安装它的机器的文件系统的备份。我也无法运行旧服务器来提取存储库,因为它的机器已升级。我从旧服务器获得的唯一东西:它的文件系统。

【问题讨论】:

How to migrate gitlab backups to new server which has latest gitlab version的可能重复 【参考方案1】:

如果您只需要迁移存储库(即:没有问题、管道等),最好克隆每个存储库并再次上传(一个接一个,或使用批处理命令):

cd /var/opt/gitlab/repositories/...
git remote add newserver url
git push --all newserver url

相反,如果您需要迁移所有功能,最好恢复服务器备份并升级 OS 和 Gitlab ......即使从 7 到 12 之间还有很长的路要走,而且您可能需要执行多个步骤。

【讨论】:

问题是系统升级后旧服务器无法启动,我只有文件系统备份,所以无法从旧服务器拉取 您在/var/opt/gitlab/repositories/ 中找到的那些文件称为“裸”存储库。你可以从那里推。 git pull --allgit push --all 做不同的事情。 git push --all 在这里可以,但git pull --all 不行。 感谢@phd,在 shadasviar 澄清后,我也更新了我的答案。【参考方案2】:

小心,这可能会导致大量破损,请在暂存系统上进行实验。

git 存储库应该是相同的,所以我会尝试将内容复制过来。用户信息和附属的东西可能不同。

另一种方法是设置旧系统并升级该系统。逐个版本,如果需要的话。

最后的手段是克隆旧的存储库并将它们上传到新系统中。

【讨论】:

我应该复制什么内容?存储库位于文件系统上用于复制它的位置?我从问题中复制了目录,但没有效果:这些.git 目录不是有效的 git 存储库

以上是关于通过文件系统将 Gitlab 存储库复制到另一个 Gitlab 服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何将存储库中的文件复制到用于作业的 Docker 容器中,在 gitlab-ci.yml

将 SVN 存储库复制到另一个服务器存储库的子文件夹中,并带有历史记录

如何将分支内容移动到另一个存储库保留历史记录并避免复制原始存储库的完整历史记录?

如何在gitlab-ci.yml中将文件从存储库复制到用于作业的docker容器中

如何使用c ++文件系统库将文件复制到另一个目录

如何在不分叉的情况下在 gitlab/github 上复制 git 存储库?