🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Import bare repositories > 原文:[https://docs.gitlab.com/ee/raketasks/import.html](https://docs.gitlab.com/ee/raketasks/import.html) * [Example output](#example-output) * [Importing bare repositories from hashed storage](#importing-bare-repositories-from-hashed-storage) * [GitLab 10.3 or earlier](#gitlab-103-or-earlier) * [GitLab 10.4 and later](#gitlab-104-and-later) # Import bare repositories[](#import-bare-repositories-core-only "Permalink") Rake 任务可用于将裸仓库导入 GitLab 实例. 注意: * 项目的所有者将是第一位管理员. * 将根据需要创建组,包括子组. * 组的所有者将是第一位管理员. * 现有项目将被跳过. * 散列存储中的项目可能会被跳过. 有关更多信息,请参阅[从哈希存储导入裸存储库](#importing-bare-repositories-from-hashed-storage) . * 现有的 Git 存储库将从磁盘中移出(从原始路径中移出). 要将裸仓库导入 GitLab 实例: 1. 创建一个新文件夹以从中导入您的 Git 存储库. 新文件夹需要具有 Git 用户所有权,并且需要对 Git 用户及其组具有读/写/执行访问权限: ``` 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`必须位于组`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/` . 3. 根据您的安装类型运行以下命令: * 全部安装 ``` 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[](#example-output "Permalink") ``` 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[](#importing-bare-repositories-from-hashed-storage "Permalink") 旧版存储中的项目具有目录结构,该目录结构反映了 GitLab 中完整的项目路径,包括名称空间结构. 裸存储库导入程序将利用此信息将项目导入到正确的位置. 每个项目及其父名称空间均有意义地命名. 但是,哈希存储中项目的目录结构不包含此信息. 由于多种原因,这是有益的,尤其是改善的性能和数据完整性. 有关更多详细信息,请参见[存储库存储类型](../administration/repository_storage_types.html) . 可导入的存储库取决于 GitLab 的版本. ### GitLab 10.3 or earlier[](#gitlab-103-or-earlier "Permalink") 不支持从哈希存储导入裸存储库. ### GitLab 10.4 and later[](#gitlab-104-and-later "Permalink") 为了支持从哈希存储中导入裸存储库,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 的[哈希存储](../administration/repository_storage_types.html#hashed-storage)中,也没有迁移到 GitLab 11.6. * 它的祖先名称空间未在 GitLab 10.4 中重命名或传输到 GitLab 11.6. [从 GitLab 11.6 开始](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/41776) ,所有裸仓库都可以导入. 要自己手动迁移存储库(对于从 GitLab 10.4 到 GitLab 11.6 的迁移),可以使用[Rails 控制台](../administration/troubleshooting/debug.html#starting-a-rails-console-session)进行. 在 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) ```