在 Gitlab 实例之间迁移存储库

Posted

技术标签:

【中文标题】在 Gitlab 实例之间迁移存储库【英文标题】:Migrate repos between instances of Gitlab 【发布时间】:2013-10-07 06:32:45 【问题描述】:

由于我以前安装的 Gitlab 太难升级(TKL 支持论坛上的帖子:http://www.turnkeylinux.org/forum/support/20120913/upgrading-gitlab),我已经下载了当前的 TKL Gitlab 发行版,并遵循 Gitlabs 标准升级路径,所以我现在已经完全升级了使用 TKLBAM 和所有好东西运行的 Gitlab 6.1 安装。到目前为止一切顺利。

但是,原来我们老版本的gitlab并没有给repos提供HTTP urls,所以这意味着我不能使用Gitlab 6.1中的“Import existing repository”功能

我知道我可以简单地将旧的 Git 存储库从旧 VM 复制到新的 VM,但是如何使这些存储库在新 VM 上的 Gitlab 中可见?

【问题讨论】:

【参考方案1】:

自GitLab 13.8(2021 年 1 月)以来,您现在拥有:

直接在实例之间迁移组

迁移 GitLab 组的更快、更简单的方法即将推出。组迁移是一项新功能,可让您直接将 GitLab 组从一个实例复制到另一个实例,而无需导出和导入任何文件

在此版本中,我们仅迁移具有基本字段的 Group 对象。 我们计划跟进越来越多的字段和相关对象,直到 Group 中的所有相关数据都以这种易于使用的方式迁移。

请参阅 Documentation 和 Epic。

【讨论】:

【参考方案2】:

如果你的 Gitlab >= 8.9,那么你可以使用 export/import 来迁移 repos。

【讨论】:

【参考方案3】:

一种选择是:

    将旧仓库从 gitlab 克隆到开发机器上。 在新的 gitlab 上创建一个空白仓库。 将新的存储库添加为开发机器上的远程。 将所有内容推回新的存储库。 从远程仓库列表中删除旧仓库。

要创建一个名为 newRepo 的远程,请执行以下操作:git remote add newRepo gitlab.localhost.com:User/newRepo.git(将末尾的 url 替换为您的 repo 的 URL)

【讨论】:

克隆会给我所有的分支吗? 是的,应该。您可以通过运行git branch -a 检查克隆后拥有哪些分支。如果它遗漏了任何内容,运行 git fetch --all 应该会检索它们。 好的,如果你有一个 repo,那就太好了。但是,如果您有 50 多个存储库、分组、30 多个用户、基于组/存储库具有不同的访问权限怎么办?那你是在没有桨的那条小溪上吗?【参考方案4】:

在阅读了 ChrisA 的答案后,我实际上是按照以下方式进行的,这让我对如何实际操作感到有些头疼。该示例将一个 repo 从 github 复制到 gitlab,以使源和目标更加清晰。

    将旧仓库从 github 克隆到开发机器上(创建一个裸仓库):

    $ git clone --mirror git@github.com:me/myrepo.git
    

    在新的 gitlab 上创建一个空白仓库。

    将新的 repo 添加为开发机器上的远程。

    $ cd myrepo.git
    $ git remote add newRepo git@gitlab.com:me/myrepo.git
    

    将所有内容推回新仓库。

    $ git push --mirror newRepo
    

就是这样。

这样它将所有分支和标签复制到新的目的地。

您现在可以从您的开发机器中删除克隆的裸仓库。

【讨论】:

我发现这使得将存储库从 GitLab 6.0 迁移到 6.9.2 变得更加容易,尽管时间很长。【参考方案5】:

我最近从 gitolite 迁移到 gitlab,官方 rake 任务 gitlab:import:repos 为我工作。我正在使用 gitlab 6.1.0 (82f3446)。这是我所做的:

rsync 从 gitolite 到 repositories/group/ 的裸仓库。确保将 repository 替换为 gitolite 存储库的名称,并更改 gitlab 服务器的主机名。

rsync -rth --progress repositories/repository.git \
git@gitlab-server:/home/git/repositories/group/

这里,group 是您希望将存储库添加到的用户组的名称。如果您没有任何特定群组,请选择root 作为群组名称。

修复权限——仅当rsync 用户不是git 时才需要:

sudo chown -R git:git repositories/group/

cd ~/gitlab

运行 rake 任务以导入所有新存储库:

bundle exec rake gitlab:import:repos RAILS_ENV=production

现在,如果您以管理员身份登录,您会发现添加了新项目。

更多信息请参考http://your-gitlab-server/help/raketasks下的“将裸仓库导入GitLab项目实例”。

在您的情况下,您可以登录旧的 TKL 系统并将所有裸存储库同步到新实例,然后导入。

【讨论】:

运行该 rake 任务时,我收到错误:无法找到 Gemfile。可能是什么问题?我正在运行 GitLab 5.0.1 @Batandwa 你确定你在/home/git/gitlab目录中吗? 在 CentOS 6.5 上全新安装 v6.5.1 对我来说失败了...我将一个裸仓库复制到 /home/git/repositories/username/repo.git,但 rake 告诉我“尝试创建组用户名失败”。然后它在 /home/git/repositories/root (管理员的命名空间)中创建一个空仓库。见github.com/gitlabhq/gitlabhq/issues/3693 和github.com/gitlabhq/gitlabhq/issues/4137

以上是关于在 Gitlab 实例之间迁移存储库的主要内容,如果未能解决你的问题,请参考以下文章

gitlab 12.9 的存储库的迁移路径是啥。到 gitlab 14.2?

不同 VM 中的 Gitlab 运行器和存储库

从 bitbucket 迁移到 GitLab

从github迁移git存储库到gitee 2022-02-15

Gitlab 中存储库的可扩展存储

从私人 gitlab 存储库的 Bower 存储库安装