在Gitlab的实例之间迁移仓库

7 人关注

由于我以前安装的Gitlab太难升级(TKL支持论坛上的帖子。 http://www.turnkeylinux.org/forum/support/20120913/upgrading-gitlab ),我下载了当前的TKL Gitlab发行版,并按照Gitlabs的标准升级路径,现在我有一个完全升级的Gitlab 6.1安装,并运行TKLBAM和所有这些好东西。到目前为止,情况还不错。

但是,事实证明,我们的旧版本的gitlab并不提供仓库的HTTP URL,所以这意味着我不能使用Gitlab 6.1中的 "导入现有仓库 "功能。

我知道我可以简单地将旧的 Git 仓库从旧的虚拟机复制到新的虚拟机上,但我怎样才能使这些仓库在新的虚拟机上的 Gitlab 中可见?

linux
git
migration
repository
gitlab
Bjørn Otto Vasbotten
Bjørn Otto Vasbotten
发布于 2013-10-01
5 个回答
redhot
redhot
发布于 2021-01-23
已采纳
0 人赞同

我最近从gitolite迁移到gitlab,官方的rake任务 gitlab:import:repos 对我有用。我使用的是gitlab 6.1.0(82f3446)。以下是我的做法。

  • rsync 从gitolite的裸仓库到 repositories/{group}/ 。请确保将 {repository} 替换为gitolite repo的名称,并更改你的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系统,然后rsync所有的裸仓库到新的实例,接着进行导入。

  • 当运行那个rake任务时,我得到了错误。 无法找到Gemfile .这个问题可能是什么?我正在运行GitLab 5.0.1
    @Batandwa 你确定你在目录中吗 /home/git/gitlab
    我在CentOS 6.5上重新安装v6.5.1时失败了...。我复制了一个裸的 repo 到 /home/git/repositories/username/repo.git,但 rake 告诉我 "Failed trying to create group username" 。然后它在/home/git/repositories/root(管理员的名字空间)创建了一个空 repo。请看 github.com/gitlabhq/gitlabhq/issues/3693 github.com/gitlabhq/gitlabhq/issues/4137
    ChrisA
    ChrisA
    发布于 2021-01-23
    0 人赞同

    One option would be to:

  • Clone the old repo from gitlab onto a dev machine.
  • Create a blank repo on the new gitlab.
  • Add the new repo as a remote on the dev machine.
  • Push everything back to the new repo.
  • Remove the old repo from remote repos list.
  • 要创建一个名为newRepo的远程,请执行。替换代码0】 (将末尾的url替换成你的 repo的url)

    克隆会给我所有的分支吗?
    是的,它应该是。你可以通过运行 git branch -a 来检查你在克隆后有哪些分支。如果它漏掉了任何一个,运行 git fetch --all 应该可以找回它们。
    好吧,如果你有一个 repo,这很好。但如果你有50个以上的 repo,分组,有30个以上的用户,根据组/repos有不同的访问权限怎么办?你会不会在没有桨的情况下掉进小河里?
    tvw
    tvw
    发布于 2021-01-23
    0 人赞同

    在看了ChrisA的回答后,我按下面的方法做了,这让我对如何实际操作有点头疼。这个例子把一个 repo 从 github 复制到 gitlab,以使源头和目的地更加清晰。

  • 从github上克隆旧的 repo到开发机上(这将创建一个裸的 repo)。

    $ git clone --mirror git@github.com:me/myrepo.git
    
  • 在新的gitlab上创建一个空白 repo。

  • 在开发机上添加新的 repo 作为远程。

    $ cd myrepo.git
    $ git remote add newRepo git@gitlab.com:me/myrepo.git
    
  • 把所有的东西都推回到新的 repo。

    $ git push --mirror newRepo
    

    就这样了。

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

    现在你可以从你的开发机上删除克隆的裸版本。

  • 我发现这使得将仓库从GitLab 6.0迁移到6.9.2要容易得多,尽管很漫长。
    keypress
    keypress
    发布于 2021-01-23
    0 人赞同

    If your Gitlab is >= 8.9, then you can use export/import 来迁移存储库。

    VonC
    VonC
    发布于 2021-01-23
    0 人赞同

    Since GitLab 13.8 (2021年1月),你现在有。

    Migrate Groups directly between instances

    一个更快、更简单的迁移GitLab群组的方法即将出现。