注意:
设置该项目的权限所有者为(第一个管理员),创建组包括子组
1.创建一个新的文件夹把git存储库导入
新文件夹需要具有git用户所有权以及git用户及其组的读/写/执行访问权限:
sudo -u git mkdir /var/opt/gitlab/git-data/repositories/new_group
2.复制存储库到文件夹
在任何子文件夹中找到的任何.git存储库都将作为项目导入 将根据需要创建组,这些组可以是嵌套文件夹。
例:如果我们将repos复制到/var/opt/gitlab/git-data/repositories,并且repo A需要在G1和G2组之下,则必须在这些文件夹下创建:/var/opt/gitlab/git-data/repositories/G1/G2/A.git
sudo cp -r /old/git/foo.git /var/opt/gitlab/git-data/repositories/new_group
sudo chown -R git:git /var/opt/gitlab/git-data/repositories
foo.git 需要由git用户和git用户组拥有。
如果您从源代码使用安装,请替换/var/opt/gitlab/为/home/git
3.根据您的安装类型运行以下命令
Omnibus安装
sudo gitlab-rake gitlab:import:repos['/var/opt/gitlab/git-data/repositories']
源代码安装
在运行此命令之前,您需要将目录更改为GitLab安装所在的目录:
cd /home/git/gitlab
sudo -u git -H bundle exec rake gitlab:import:repos['/var/opt/gitlab/git-data/repositories'] 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 10.3或更早版本
不支持从散列存储导入裸存储库。
GitLab 10.4及更高版本
为了支持从散列存储导入裸存储库,GitLab 10.4及更高版本将每个存储库的完整项目路径存储在git存储库配置文件的特殊部分中。本节格式如下:
[gitlab]
fullpath = gitlab-org/gitlab-ce
但是,现有存储库未迁移以包含此路径。
如果GitLab 10.4及更高版本中的存储库发生以下事件,则可以导入裸存储库:
创建
迁移到散列存储
改名
转移到另一个名称空间
祖先改名
祖先转移到另一个命名空间
GitLab 10.4及更高版本无法导入裸存储库时,以下所有内容都适用于存储库:
它是在GitLab 10.3或更早版本中创建的。
它未在GitLab 10.4及更高版本中重命名,传输或迁移到散列存储。
它的祖先命名空间未在GitLab 10.4及更高版本中重命名或传输。
有一个未解决的问题是添加迁移以使所有裸存储库都可导入。
在此之前,您可能希望自己手动迁移存储库。您可以使用
Rails控制台
执行此操作。在Rails控制台会话中,运行以下命令以迁移项目:
project = Project.find_by_full_path('gitlab-org/gitlab-ce')
project.write_repository_config
在Rails控制台会话中,运行以下命令以迁移所有命名空间的项目(如果命名空间中有1000个项目,这可能需要一段时间):
namespace = Namespace.find_by_full_path('gitlab-org')
namespace.send(:write_projects_repository_config)