# GitLab から GitHub にリポジトリを移行する

試用版の実行を実行し、リポジトリを GitLab から GitHub に移行します。

## Prerequisites

* このガイドの前のすべてのフェーズを完了している必要があります。
* GitLab プロジェクトはエクスポートに対して有効にする必要があります。 GitLab ドキュメントのインポートについては、「プロジェクトのエクスポートと [Sidekiq の構成を](https://docs.gitlab.com/administration/sidekiq/configuration_for_imports/)[有効にする」](https://docs.gitlab.com/administration/settings/import_and_export_settings/#enable-project-export)を参照してください。
* 移行されるデータと、Importer の既知のサポート制限事項を理解していることを確認します。 詳細については、 [AUTOTITLE を](/ja/migrations/using-github-enterprise-importer/migrate-from-gitlab/understand-migrations)参照してください。
* 必須ではありませんが、運用環境の移行の間は作業を停止することをお勧めします。 Importer は差分移行をサポートしていないため、移行中に発生した変更は移行されません。 運用環境の移行の間に作業を停止しない場合は、これらの変更を手動で移行する必要があります。

## 試用版の実行

企業固有の問題を明らかにするために、移行の試用を実行することを強くお勧めします。 試用版の実行では、次の内容について学習します。

* 特定のリポジトリの移行が正常に完了できるかどうか。
* 移行されたリポジトリを実行可能な状態に戻すことができるかどうか。
* 移行の実行にかかる時間。

試用版の実行はいつでも実行でき、移行中に作業を停止する必要はありません。 試験的移行の完了にかかる時間を短縮するには、試験的実行のバッチを連続してスケジュールできます。 それらのリポジトリのユーザーは、都合のよいときに結果を検証できます。

1. 試用版の移行のテスト用 Organization を作成します。

   すべての試験的実行に 1 つの Organization を使うことも、目的の移行先 Organization ごとに 1 つのテスト Organization を作成することもできます。 Organization が移行検証のみを目的としており、運用環境向けではないことを明確にするために、Organization 名の末尾に `-sandbox` を含めることを検討してください。 終わったら、テスト Organization を削除してかまいません。

2. 試験的移行を実行します。

3. [フォローアップ タスク](/ja/migrations/using-github-enterprise-importer/migrate-from-gitlab/follow-up-tasks) でフォローアップ タスクを完了できることを確認します。

4. 移行の結果を検証するようにユーザーに依頼します。

5. 試験的移行によって明らかになった問題を解決します。

6. 必要に応じて、テスト用の Organization を削除します。

## 1 つのリポジトリの移行

1 つのリポジトリを移行するには、 `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
```

上のコマンドのプレースホルダーを次の値に置き換えます。

| プレースホルダー                                                                   | 価値                                                                                    |
| -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| GITLAB\_SERVER\_URL                                                        |                                                                                       |
| `https://gitlab.com`や`https://gitlab.example.com`など、GitLab インスタンスの完全な URL。 |                                                                                       |
| SOURCE\_GROUP                                                              | プロジェクトを含むグループまたは名前空間の完全なパス。 入れ子になったサブグループの場合は、 `parent-group/subgroup`などの完全なパスを使用します。 |
| SOURCE\_PROJECT                                                            | 移行する GitLab プロジェクト。                                                                   |
| 先                                                                          |                                                                                       |
| GitHubの宛先組織。                                                               |                                                                                       |
| NEW\_REPO\_NAME                                                            |                                                                                       |
| GitHub上のリポジトリの名前。                                                          |                                                                                       |

GitHub-owned blob storageを使用していない場合は、「[AUTOTITLE」](/ja/migrations/using-github-enterprise-importer/migrate-from-gitlab/configure-storage)を参照してください。

### 追加の引数

| 引数                                                                                                                                | 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 は Enterprise のサブドメインのベース API URL です。 (例: `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 は、企業のサブドメインのベース アップロード API URL です。 たとえば、 `https://uploads.octocorp.ghe.com`と指定します。 既定値は `https://uploads.github.com` です。 |
| `--no-ssl-verify`                                                                                                                 |                                                                                                                                                                                                                                                 |
| GL2GH extensionが GitLab インスタンスと通信するときに SSL 検証を無効にします。 これは、GitLab インスタンスで自己署名証明書が使用されている場合にのみ使用します。 その他のすべての手順では、引き続き SSL が確認されます。 |                                                                                                                                                                                                                                                 |
| `--archive-url URL`                                                                                                               | GitLab からプロジェクトを再度エクスポートするのではなく、以前にエクスポートしたアーカイブを URL からインポートします。                                                                                                                                                                               |
| `--archive-path PATH`                                                                                                             | GitLab からプロジェクトを再度エクスポートするのではなく、以前にエクスポートしたアーカイブをローカル ファイル パスからインポートします。                                                                                                                                                                        |
| `--keep-archive`                                                                                                                  | アップロードが成功した後に削除するのではなく、エクスポート アーカイブをローカルに保持します。                                                                                                                                                                                                 |

## 移行スクリプトの生成

複数のリポジトリを一度に GitHub Enterprise Cloud に移行する場合は、 GitHub CLI を使用して移行スクリプトを生成します。 結果のスクリプトには、リポジトリごとに 1 つの `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
```

上のコマンドのプレースホルダーを次の値に置き換えます。

| プレースホルダー                                                                   | 価値                                                                                                                                                                                                                                                                                                                                                                             |
| -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| GITLAB\_SERVER\_URL                                                        |                                                                                                                                                                                                                                                                                                                                                                                |
| `https://gitlab.com`や`https://gitlab.example.com`など、GitLab インスタンスの完全な URL。 |                                                                                                                                                                                                                                                                                                                                                                                |
| 先                                                                          |                                                                                                                                                                                                                                                                                                                                                                                |
| GitHubの宛先組織。                                                               |                                                                                                                                                                                                                                                                                                                                                                                |
| FILENAME                                                                   | 結果の移行スクリプトのファイル名<br><br>ターミナルを使っている場合は、生成されたスクリプトの実行に PowerShell が必要なので、`.ps1` ファイル拡張子を使います。 [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) 用の PowerShell をインストールできます。 |

既定では、スクリプトにはトークンがアクセスできるすべてのプロジェクトが含まれます。 スクリプトのスコープを設定するには、1 つのプロジェクトの `--gitlab-group GROUP`または `--gitlab-group GROUP --gitlab-project PROJECT` を追加します。

GitHub-owned blob storageを使用していない場合は、「[BLOB ストレージを構成する](/ja/migrations/using-github-enterprise-importer/migrate-from-gitlab/configure-storage)」を参照してください。

### 追加の引数

| 引数                                        | Description                                                                                                                                                                                                                                     |
| ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `--target-api-url TARGET-API-URL`         | GHE.com に移行する場合は、`--target-api-url TARGET-API-URL` を追加します。TARGET-API-URL は Enterprise のサブドメインのベース API URL です。 (例: `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 は、企業のサブドメインのベース アップロード API URL です。 たとえば、 `https://uploads.octocorp.ghe.com`と指定します。 既定値は `https://uploads.github.com` です。 |

### 移行スクリプトの確認

スクリプトを生成したら、ファイルを確認し、必要に応じてスクリプトを編集します。

* 移行したくないリポジトリがある場合は、対応する行を削除するかコメントにします。
* 移行先の Organization でリポジトリに別の名前を使う場合は、対応する `--github-repo` フラグの値を更新します。
* 新しいリポジトリの可視性を変更する場合は、対応する `--target-repo-visibility` フラグを追加または更新します。

### リポジトリを移行する

試用の実行が成功し、フォローアップ タスクを完了できた場合は、実際の移行に進むことができます。

> \[!WARNING] 移行するリポジトリの作業は停止することをお勧めします。 移行中または移行後に行われた変更は、手動で移行する必要があります。

生成したスクリプトを実行します。 次のコマンドの FILENAME を、スクリプトの生成時に指定したファイル名に置き換えます。

* ターミナルを使っている場合は、`./` を使います。

  ```shell copy
  ./FILENAME
  ```

* PowerShell を使っている場合は、`.\` を使います。

  ```shell copy
  .\FILENAME
  ```