Import bare repositories
Import bare repositories
Rake 任务可用于将裸仓库导入 GitLab 实例.
注意:
- 项目的所有者将是第一位管理员.
- 将根据需要创建组,包括子组.
- 组的所有者将是第一位管理员.
- 现有项目将被跳过.
- 散列存储中的项目可能会被跳过. 有关更多信息,请参阅从哈希存储导入裸存储库 .
- 现有的 Git 存储库将从磁盘中移出(从原始路径中移出).
要将裸仓库导入 GitLab 实例:
创建一个新文件夹以从中导入您的 Git 存储库. 新文件夹需要具有 Git 用户所有权,并且需要对 Git 用户及其组具有读/写/执行访问权限:
sudo -u git mkdir -p /var/opt/gitlab/git-data/repository-import-<date>/new_group
将裸存储库复制到此新创建的文件夹中. 注意:
- 在任何子文件夹中找到的所有
.git
存储库都将作为项目导入. - 将根据需要创建组,这些组可以是嵌套文件夹.
例如,如果我们将存储库复制到
/var/opt/gitlab/git-data/repository-import-<date>
,并且存储库A
必须位于组G1
和G2
,则必须在以下文件夹下创建它:/var/opt/gitlab/git-data/repository-import-<date>/G1/G2/A.git
.sudo cp -r /old/git/foo.git /var/opt/gitlab/git-data/repository-import-<date>/new_group/
# Do this once when you are done copying git repositories
sudo chown -R git:git /var/opt/gitlab/git-data/repository-import-<date>
foo.git
必须由git
用户和git
用户组拥有.如果您使用源安装,请用
/home/git
替换/var/opt/gitlab/
.- 在任何子文件夹中找到的所有
根据您的安装类型运行以下命令:
- 全部安装
sudo gitlab-rake gitlab:import:repos['/var/opt/gitlab/git-data/repository-import-<date>']
- 从源安装. 在运行此命令之前,您需要切换到 GitLab 安装所在的目录:
cd /home/git/gitlab
sudo -u git -H bundle exec rake gitlab:import:repos['/var/opt/gitlab/git-data/repository-import-<date>'] RAILS_ENV=production
Example output
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
[...]
Importing bare repositories from hashed storage
旧版存储中的项目具有目录结构,该目录结构反映了 GitLab 中完整的项目路径,包括名称空间结构. 裸存储库导入程序将利用此信息将项目导入到正确的位置. 每个项目及其父名称空间均有意义地命名.
但是,哈希存储中项目的目录结构不包含此信息. 由于多种原因,这是有益的,尤其是改善的性能和数据完整性. 有关更多详细信息,请参见存储库存储类型 .
可导入的存储库取决于 GitLab 的版本.
GitLab 10.3 or earlier
不支持从哈希存储导入裸存储库.
GitLab 10.4 and later
为了支持从哈希存储中导入裸存储库,GitLab 10.4 和更高版本将每个存储库的完整项目路径存储在 Git 存储库配置文件的特殊部分. 本节的格式如下:
[gitlab]
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 控制台会话中,运行以下命令来迁移项目:
project = Project.find_by_full_path('gitlab-org/gitlab')
project.write_repository_config
在 Rails 控制台会话中,运行以下命令以迁移名称空间的所有项目(如果名称空间中有数千个项目,则可能需要一段时间):
namespace = Namespace.find_by_full_path('gitlab-org')
namespace.send(:write_projects_repository_config)