Import bare repositories

原文:https://docs.gitlab.com/ee/raketasks/import.html

Import bare repositories

Rake 任务可用于将裸仓库导入 GitLab 实例.

注意:

  • 项目的所有者将是第一位管理员.
  • 将根据需要创建组,包括子组.
  • 组的所有者将是第一位管理员.
  • 现有项目将被跳过.
  • 散列存储中的项目可能会被跳过. 有关更多信息,请参阅从哈希存储导入裸存储库 .
  • 现有的 Git 存储库将从磁盘中移出(从原始路径中移出).

要将裸仓库导入 GitLab 实例:

  1. 创建一个新文件夹以从中导入您的 Git 存储库. 新文件夹需要具有 Git 用户所有权,并且需要对 Git 用户及其组具有读/写/执行访问权限:

    1. sudo -u git mkdir -p /var/opt/gitlab/git-data/repository-import-<date>/new_group
  2. 将裸存储库复制到此新创建的文件夹中. 注意:

    • 在任何子文件夹中找到的所有.git存储库都将作为项目导入.
    • 将根据需要创建组,这些组可以是嵌套文件夹.

    例如,如果我们将存储库复制到/var/opt/gitlab/git-data/repository-import-<date> ,并且存储库A必须位于组G1G2 ,则必须在以下文件夹下创建它: /var/opt/gitlab/git-data/repository-import-<date>/G1/G2/A.git .

    1. sudo cp -r /old/git/foo.git /var/opt/gitlab/git-data/repository-import-<date>/new_group/
    2. # Do this once when you are done copying git repositories
    3. sudo chown -R git:git /var/opt/gitlab/git-data/repository-import-<date>

    foo.git必须由git用户和git用户组拥有.

    如果您使用源安装,请用/home/git替换/var/opt/gitlab/ .

  3. 根据您的安装类型运行以下命令:

    • 全部安装
    1. sudo gitlab-rake gitlab:import:repos['/var/opt/gitlab/git-data/repository-import-<date>']
    • 从源安装. 在运行此命令之前,您需要切换到 GitLab 安装所在的目录:
    1. cd /home/git/gitlab
    2. sudo -u git -H bundle exec rake gitlab:import:repos['/var/opt/gitlab/git-data/repository-import-<date>'] RAILS_ENV=production

Example output

  1. Processing /var/opt/gitlab/git-data/repository-import-1/a/b/c/blah.git
  2. * Using namespace: a/b/c
  3. * Created blah (a/b/c/blah)
  4. * Skipping repo /var/opt/gitlab/git-data/repository-import-1/a/b/c/blah.wiki.git
  5. Processing /var/opt/gitlab/git-data/repository-import-1/abcd.git
  6. * Created abcd (abcd.git)
  7. Processing /var/opt/gitlab/git-data/repository-import-1/group/xyz.git
  8. * Using namespace: group (2)
  9. * Created xyz (group/xyz.git)
  10. * Skipping repo /var/opt/gitlab/git-data/repository-import-1/@shared/a/b/abcd.git
  11. [...]

Importing bare repositories from hashed storage

旧版存储中的项目具有目录结构,该目录结构反映了 GitLab 中完整的项目路径,包括名称空间结构. 裸存储库导入程序将利用此信息将项目导入到正确的位置. 每个项目及其父名称空间均有意义地命名.

但是,哈希存储中项目的目录结构不包含此信息. 由于多种原因,这是有益的,尤其是改善的性能和数据完整性. 有关更多详细信息,请参见存储库存储类型 .

可导入的存储库取决于 GitLab 的版本.

GitLab 10.3 or earlier

不支持从哈希存储导入裸存储库.

GitLab 10.4 and later

为了支持从哈希存储中导入裸存储库,GitLab 10.4 和更高版本将每个存储库的完整项目路径存储在 Git 存储库配置文件的特殊部分. 本节的格式如下:

  1. [gitlab]
  2. fullpath = gitlab-org/gitlab

但是,现有存储库并未迁移为包括此路径.

如果 GitLab 10.4 和更高版本中的存储库发生以下事件,则裸存储库是可导入的:

  • Created
  • 迁移到哈希存储
  • Renamed
  • 转移到另一个名称空间
  • 祖先更名
  • 祖先转移到另一个名称空间

如果仓库满足以下所有条件,则裸仓库无法通过 GitLab 10.4 导入到 GitLab 11.6:

  • 它是在 GitLab 10.3 或更早版本中创建的.
  • 它没有重命名,传输或迁移到 GitLab 10.4 的哈希存储中,也没有迁移到 GitLab 11.6.
  • 它的祖先名称空间未在 GitLab 10.4 中重命名或传输到 GitLab 11.6.

从 GitLab 11.6 开始 ,所有裸仓库都可以导入.

要自己手动迁移存储库(对于从 GitLab 10.4 到 GitLab 11.6 的迁移),可以使用Rails 控制台进行. 在 Rails 控制台会话中,运行以下命令来迁移项目:

  1. project = Project.find_by_full_path('gitlab-org/gitlab')
  2. project.write_repository_config

在 Rails 控制台会话中,运行以下命令以迁移名称空间的所有项目(如果名称空间中有数千个项目,则可能需要一段时间):

  1. namespace = Namespace.find_by_full_path('gitlab-org')
  2. namespace.send(:write_projects_repository_config)