516.md 5.7 KB
Newer Older
Lab机器人's avatar
readme  
Lab机器人 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
# 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) 
```