导入裸仓库(已废弃)
gitlab:import:repos
Rake 任务的替代方案包括:
- 使用导出文件,或直接传输迁移代码仓库。
- 通过 URL 导入代码仓库。
- 导入来自其他源头的代码仓库。
Rake 任务可用于将裸仓库导入极狐GitLab 实例。 从现有极狐GitLab 实例迁移时,为保留用户及其命名空间的所有权,迁移项目使用:
导入代码仓库时:
- 项目的所有者是第一个管理员。
- 根据需要创建群组,包括子组。
- 群组的所有者是第一个管理员。
- 现有项目被跳过。
- 可以跳过哈希存储中的项目。详情请参见从哈希存储导入裸仓库。
- 现有 Git 仓库从磁盘移动过来(从原始路径中删除)。
将裸仓库导入到极狐GitLab 实例:
-
创建一个新文件夹以从中导入您的 Git 仓库。 您还可以将项目导入(子)组的命名空间,而不是管理员的命名空间。为此,请创建子文件夹并将这些子文件夹的所有权和读/写/执行权限授予
git
用户及其群组:sudo -u git mkdir -p /var/opt/gitlab/git-data/repository-import-$(date "+%Y-%m-%d")/<optional_groupname>/<optional_subgroup>
-
将您的裸仓库复制到这个新创建的文件夹中。请注意:
- 在任何子文件夹中找到的任何
.git
仓库都会作为项目被导入。 - 根据需要创建群组,可以是嵌套文件夹。
例如,如果我们将仓库复制到
/var/opt/gitlab/git-data/repository-import-2020-08-22
,并且仓库A
需要在群组G1
和G2
下,它必须在这些文件夹下创建:/var/opt/gitlab/git-data/repository-import-2020-08-22/G1/G2/A.git
。sudo cp -r /old/git/foo.git /var/opt/gitlab/git-data/repository-import-$(date "+%Y-%m-%d")/<optional_groupname>/<optional_subgroup> # Do this once when you are done copying git repositories sudo chown -R git:git /var/opt/gitlab/git-data/repository-import-$(date "+%Y-%m-%d")
foo.git
需要由git
用户和git
用户组拥有。如果您从源代码安装,请将
/var/opt/gitlab/
替换为/home/git
。 - 在任何子文件夹中找到的任何
-
根据您的安装类型,运行以下命令:
- Omnibus 安装
sudo gitlab-rake gitlab:import:repos["/var/opt/gitlab/git-data/repository-import-$(date "+%Y-%m-%d")"]
-源代码安装。在运行此命令之前,您需要更改到安装极狐GitLab 的目录:
cd /home/git/gitlab sudo -u git -H bundle exec rake gitlab:import:repos["/var/opt/gitlab/git-data/repository-import-$(date "+%Y-%m-%d")"] RAILS_ENV=production
示例输出
Processing /var/opt/gitlab/git-data/repository-import-1/a/b/c/blah.git
* Using namespace: a/b/c
* Created blah (a/b/c/blah)
* Skipping repo /var/opt/gitlab/git-data/repository-import-1/a/b/c/blah.wiki.git
Processing /var/opt/gitlab/git-data/repository-import-1/abcd.git
* Created abcd (abcd.git)
Processing /var/opt/gitlab/git-data/repository-import-1/group/xyz.git
* Using namespace: group (2)
* Created xyz (group/xyz.git)
* Skipping repo /var/opt/gitlab/git-data/repository-import-1/@shared/a/b/abcd.git
[...]
从哈希存储导入裸仓库
遗留存储中的项目具有镜像极狐GitLab 中的完整项目路径的目录结构,包括它们的命名空间结构。 裸仓库导入器使用这些信息,将项目导入到适当的位置。每个项目及其父命名空间都进行了有意义的命名。
但是,哈希存储中项目的目录结构不包含此信息。出于多种原因,这是有益的,尤其是在提高性能和保护数据完整性方面。详情请参见仓库存储类型。
可导入的仓库取决于极狐GitLab 的版本。
极狐GitLab 10.3 及更早版本
不支持从哈希存储导入裸仓库。
极狐GitLab 10.4 及更高版本
为了支持从散列存储导入裸仓库,极狐GitLab 10.4 及更高版本将完整项目路径存储在每个仓库内部中 Git 仓库配置文件内的一个特殊位置。位置格式如下:
[gitlab]
fullpath = gitlab-org/gitlab
但是,现有仓库未迁移以包含此路径。
如果在极狐GitLab 10.4 及更高版本中发生以下事件,则可以导入裸仓库:
- 创建
- 迁移到哈希存储
- 重命名
- 转移到另一个命名空间
- 祖先更名
-
祖先转移到另一个命名空间
如果以下所有关于仓库的情况都属实,那么极狐GitLab 10.4 不能将裸仓库导入到 11.6 中:
- 仓库是在极狐GitLab 10.3 或更早版本中创建的。
- 在极狐GitLab 10.4 到 11.6 中,仓库没有被重命名、转移或迁移到哈希存储。
- 在极狐GitLab 10.4 到 11.6 中,仓库的祖先命名空间没有被重命名或转移。
project = Project.find_by_full_path('gitlab-org/gitlab')
project.set_full_path
在 Rails 控制台会话中,运行以下命令来迁移所有命名空间的项目(如果命名空间中有几千个项目,这可能需要一段时间):
namespace = Namespace.find_by_full_path('gitlab-org')
namespace.send(:write_projects_repository_config)