# Перенос репозиториев из GitLab в GitHub

Выполните пробную версию, а затем перенесите репозитории из GitLab в GitHub.

## Необходимые условия

* Вы должны были пройти все предыдущие этапы этого руководства.
* Для экспорта необходимо включить проект GitLab. См. раздел ["Включить экспорт проекта](https://docs.gitlab.com/administration/settings/import_and_export_settings/#enable-project-export) " и [конфигурацию Sidekiq для импорта](https://docs.gitlab.com/administration/sidekiq/configuration_for_imports/) в документации по GitLab.
* Убедитесь, что вы понимаете данные, которые будут перенесены, и известные ограничения поддержки импорта. Для получения дополнительной информации см. [Общие сведения о миграции из GitLab в GitHub](/ru/migrations/using-github-enterprise-importer/migrate-from-gitlab/understand-migrations).
* Хотя и не требуется, рекомендуется остановить работу во время рабочей миграции. Importer не поддерживает разностную миграцию, поэтому любые изменения, которые происходят во время миграции, не будут переноситься. Если вы решили не останавливать работу во время рабочей миграции, необходимо вручную перенести эти изменения.

## Выполнение пробного запуска

Чтобы выявить проблемы, которые могут быть уникальны для вашего предприятия, мы настоятельно рекомендуем провести пробный запуск вашей миграции. На пробном запуске вы узнаете:

* Может ли миграция для конкретного репозитория успешно завершиться.
* Сможете ли вы вернуть мигрированный репозиторий в рабочее состояние.
* Сколько времени займёт миграция?

Пробные запуски могут проводиться в любое время, и работа не обязательно останавливается во время миграции. Чтобы сократить время, необходимое для завершения миграции пробных версий, можно запланировать пакеты для пробной версии. Пользователи этих репозиториев могут проверять результаты самостоятельно.

1. Создайте тестовую организацию для пробной миграции.

   Вы можете использовать одну организацию для всех пробных запусков или создать одну тестовую организацию для каждой целевой организации. Рассмотрите возможность включения `-sandbox` в конце имен организации, чтобы уточнить, что организации предназначены только для проверки миграции, а не для рабочей среды. После завершения можно удалить тестовые организации.

2. Запустите пробные миграции.

3. Убедитесь, что вы можете выполнить последующие задачи в [AUTOTITLE.](/ru/migrations/using-github-enterprise-importer/migrate-from-gitlab/follow-up-tasks)

4. Попросите пользователей проверить результаты миграции.

5. Устраните все проблемы, обнаруженные миграцией пробной версии.

6. При необходимости удалите тестовую организацию.

## Перенос одного репозитория

Чтобы перенести один репозиторий `gh gl2gh migrate-repo` , используйте команду.

```shell copy
gh gl2gh migrate-repo \
  --gitlab-server-url GITLAB_SERVER_URL \
  --gitlab-group SOURCE_GROUP \
  --gitlab-project SOURCE_PROJECT \
  --github-org DESTINATION \
  --github-repo NEW_REPO_NAME \
  --use-github-storage
```

Замените заполнители в приведенной выше команде следующими значениями.

| Placeholder         | Ценность                                                                                                                                               |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| GITLAB\_SERVER\_URL | Полный URL-адрес экземпляра GitLab, например `https://gitlab.com` или `https://gitlab.example.com`.                                                    |
| SOURCE\_GROUP       | Полный путь к группе или пространству имен, который содержит проект. Для вложенных подгрупп используйте полный путь, например `parent-group/subgroup`. |
| SOURCE\_PROJECT     | Проект GitLab для миграции.                                                                                                                            |
| НАЗНАЧЕНИЯ          | Целевая организация GitHubв .                                                                                                                          |
| NEW\_REPO\_NAME     | Имя репозитория GitHubв .                                                                                                                              |

Если вы не используете GitHub-owned blob storage, см. [раздел AUTOTITLE](/ru/migrations/using-github-enterprise-importer/migrate-from-gitlab/configure-storage).

### Дополнительные аргументы

| Argument                                  | Description                                                                                                                                                                                                                                                                                                          |
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `--target-repo-visibility`                | Задает видимость нового репозитория `public`для , `private`или `internal`. По умолчанию — `private`.                                                                                                                                                                                                                 |
| `--target-api-url TARGET-API-URL`         | Если вы переносите данные GHE.com, добавьте `--target-api-url TARGET-API-URL`, где TARGET-API-URL является базовым URL-адресом API для поддомена предприятия. Например: `https://api.octocorp.ghe.com`.                                                                                                              |
| `--target-uploads-url TARGET-UPLOADS-URL` | Если вы выполняете миграцию GHE.com и используете GitHub-owned blob storage, также добавьте `--target-uploads-url TARGET-UPLOADS-URL`, где target-UPLOADS-URL — это URL-адрес API для поддомена предприятия. Например: `https://uploads.octocorp.ghe.com`. Значение по умолчанию — это `https://uploads.github.com`. |
| `--no-ssl-verify`                         | Отключает проверку SSL при выполнении переговоров с экземпляром GL2GH extension GitLab. Используйте это только в том случае, если экземпляр GitLab использует самозаверяющий сертификат. Все остальные шаги по-прежнему проверяют SSL.                                                                               |
| `--archive-url URL`                       | Импортирует ранее экспортируемый архив из URL-адреса, а не экспорт проекта из GitLab еще раз.                                                                                                                                                                                                                        |
| `--archive-path PATH`                     | Импортирует ранее экспортируемый архив из локального пути к файлу, а не экспорт проекта из GitLab еще раз.                                                                                                                                                                                                           |
| `--keep-archive`                          | Сохраняет архив экспорта локально, а не удаляет его после успешной отправки.                                                                                                                                                                                                                                         |

## Создание скрипта миграции

Если вы хотите перенести несколько репозиториев GitHub Enterprise Cloud в один раз, используйте GitHub CLI его для создания скрипта миграции. Результирующий скрипт содержит одну `migrate-repo` команду для каждого репозитория.

Чтобы создать скрипт миграции, выполните `gh gl2gh generate-script` команду.

```shell copy
gh gl2gh generate-script \
  --gitlab-server-url GITLAB_SERVER_URL \
  --github-org DESTINATION \
  --output FILENAME \
  --use-github-storage
```

Замените заполнители в приведенной выше команде следующими значениями.

| Placeholder         | Ценность                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| GITLAB\_SERVER\_URL | Полный URL-адрес экземпляра GitLab, например `https://gitlab.com` или `https://gitlab.example.com`.                                                                                                                                                                                                                                                                                                                                                                           |
| НАЗНАЧЕНИЯ          | Целевая организация GitHubв .                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| FILENAME            | Имя файла для результирующего скрипта миграции<br><br>Если вы используете терминал, используйте `.ps1` расширение файла в качестве созданного скрипта, чтобы запустить PowerShell. Вы можете установить PowerShell для [Mac](https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.2) или [Linux](https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-linux?view=powershell-7.2). |

По умолчанию скрипт включает каждый проект, к которым может получить доступ маркер. Чтобы задать область действия скрипта, добавьте `--gitlab-group GROUP`или `--gitlab-group GROUP --gitlab-project PROJECT` для одного проекта.

Если вы не используете GitHub-owned blob storage, см. [раздел AUTOTITLE](/ru/migrations/using-github-enterprise-importer/migrate-from-gitlab/configure-storage).

### Дополнительные аргументы

| Argument                                  | Description                                                                                                                                                                                                                                                                                                          |
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `--target-api-url TARGET-API-URL`         | Если вы переносите данные GHE.com, добавьте `--target-api-url TARGET-API-URL`, где TARGET-API-URL является базовым URL-адресом API для поддомена предприятия. Например: `https://api.octocorp.ghe.com`.                                                                                                              |
| `--target-uploads-url TARGET-UPLOADS-URL` | Если вы выполняете миграцию GHE.com и используете GitHub-owned blob storage, также добавьте `--target-uploads-url TARGET-UPLOADS-URL`, где target-UPLOADS-URL — это URL-адрес API для поддомена предприятия. Например: `https://uploads.octocorp.ghe.com`. Значение по умолчанию — это `https://uploads.github.com`. |

### Просмотр скрипта миграции

После создания скрипта просмотрите файл и, при необходимости, измените скрипт.

* Если есть какие-либо репозитории, которые вы не хотите перенести, удалить или закомментировать соответствующие строки.
* Если в целевой организации есть другое имя репозиториев, обновите значение соответствующего `--github-repo` флага.
* Если вы хотите изменить видимость нового репозитория, добавьте или обновите соответствующий `--target-repo-visibility` флаг.

### Перенос репозиториев

Если ваш пробный запуск прошёл успешно и вы смогли выполнить последующие задачи, можно перейти к реальной миграции.

> \[!WARNING] Рекомендуем приостановить работу в репозиториях, которые вы переносите. Любые изменения, внесённые во время или после миграции, нужно будет мигрировать вручную.

Запустите созданный скрипт. Замените FILENAME в приведенных ниже командах именем файла, указанным при создании скрипта.

* Если вы используете терминал, используйте `./`.

  ```shell copy
  ./FILENAME
  ```

* Если вы используете PowerShell, используйте `.\`.

  ```shell copy
  .\FILENAME
  ```