【问题标题】:Migrate repos between instances of Gitlab在 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 中可见?

【问题讨论】:

    标签: linux git migration repository gitlab


    【解决方案1】:

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

    直接在实例之间迁移组

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

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

    请参阅 DocumentationEpic

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        一种选择是:

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

        要创建一个名为 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,以使源和目标更加清晰。

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

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

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

          $ cd myrepo.git
          $ git remote add newRepo git@gitlab.com:me/myrepo.git
          
        4. 将所有内容推回新仓库。

          $ 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/3693github.com/gitlabhq/gitlabhq/issues/4137
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-20
        • 1970-01-01
        • 2021-11-15
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        相关资源
        最近更新 更多