在 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?