Skip to main content
Skip to content

2 つのデータ常駐企業間でのリポジトリの移行

GitHub Enterprise Importerに GitHub CLI (GEI) 拡張機能を使用して、データ所在地付き GitHub Enterprise Cloudの 2 つのインスタンス間でリポジトリを移行できます。

データ常駐企業間の移行について

2 つのデータ常駐企業間の移行では、標準の GEI アーカイブ移行フローが使用されます。

  1. GEI はソース GHE.com サブドメインに接続します。
  2. GEI は、リポジトリ データを含むアーカイブを生成します。
  3. GEI は、サポートされている移行ストレージにアーカイブをアップロードします。
  4. GEI は、ターゲット GHE.com サブドメインでリポジトリの移行を開始します。
  5. 転送先 Importer はアーカイブをダウンロードして処理します。

この移行では、次の操作を行います。

  • ソースは、https://SOURCE_SUBDOMAIN.ghe.comなどのGHE.comサブドメインです。
  • 宛先は、https://DESTINATION_SUBDOMAIN.ghe.comなど、別のGHE.comサブドメインです。
  • 移行元と移行先の組織は、異なる名前を持つことができます。
  • 移行されたリポジトリは、移行先組織で別の名前を持つことができます。

ソース API エンドポイントと宛先 API エンドポイントは、個別に指定する必要があります。 ソース操作には宛先 API URL を使用しないでください。

重要

データ所在地付き GitHub Enterprise Cloud API URL では、 https://api.SUBDOMAIN.ghe.com形式が使用されます。 これは、通常、https://HOSTNAME/api/v3形式を使用するGitHub Enterprise Server API URL とは異なります。

前提条件

準備:

  • ソースと宛先がサブドメイン GHE.com 異なっていることを確認します。
  • 移行元組織と移行先組織の両方で、自分が組織の所有者であるか、移行元ロールが付与されていることを確認します。
  • ソース組織用のpersonal access token (classic)を作成します。
  • 移行先組織の personal access token (classic) を作成します。 必要なスコープについては、 GitHub 製品間の移行のためのアクセスの管理 を参照してください。
  • 運用移行を実行する前に、試用版の移行を実行します。

運用移行中は、ソース リポジトリの作業を一時的に停止することをお勧めします。 GitHub Enterprise Importer は差分移行を実行しないため、移行の開始後に行われた変更は自動的には含まれません。

移行されたデータと既知の制限事項については、 GitHub Enterprise Importer を使用したGitHub製品間の移行について を参照してください。

GitHub CLIと GEI をインストールする

GitHub CLIをインストールし、GEI 拡張機能をインストールします。

Bash
gh extension install github/gh-gei

移行を開始する前に拡張機能を更新します。

Bash
gh extension upgrade github/gh-gei

使用可能なオプションを表示するには:

Bash
gh gei migrate-repo --help

環境変数の設定

両方の企業の personal access tokenを設定します。

Bash
export GH_SOURCE_PAT="SOURCE_PERSONAL_ACCESS_TOKEN"
export GH_PAT="DESTINATION_PERSONAL_ACCESS_TOKEN"

各 GHE.com サブドメインの API URL を設定します。

Bash
export SOURCE_API_URL="https://api.SOURCE_SUBDOMAIN.ghe.com"
export TARGET_API_URL="https://api.DESTINATION_SUBDOMAIN.ghe.com"

SOURCE_SUBDOMAINとDESTINATION_SUBDOMAINを、移行元企業と移行先企業のサブドメインに置き換えます。

例えば次が挙げられます。

Bash
export SOURCE_API_URL="https://api.source-example.ghe.com"
export TARGET_API_URL="https://api.destination-example.ghe.com"

GH_SOURCE_PAT トークンは、アーカイブの生成を含むソース側の操作に使用されます。 GH_PAT トークンは、宛先側の操作に使用されます。

アーカイブ BLOB ストレージを構成する

GitHub Enterprise Importer は、各プロジェクトをアーカイブにエクスポートし、そのアーカイブを読み取り可能な BLOB ストレージ GitHub アップロードします。 移行を実行するときに、ストレージ バックエンドを選択します。

ストレージオプションそれを選択する方法注記

GitHub-owned blob storage (推奨) | --use-github-storage | セットアップは必要ありません。 GitHub は、移行が成功した後、または移行が失敗してから 7 日後にアーカイブを自動的に削除します。 AWS S3 | --aws-bucket-name ( AWS_REGION、 AWS_ACCESS_KEY_ID、および AWS_SECRET_ACCESS_KEY 環境変数を使用し、必要に応じて AWS_SESSION_TOKEN) | バケットとそのライフサイクルを所有している。 GitHub は、ストレージからアーカイブを削除しません。 Azure Blob Storage | AZURE_STORAGE_CONNECTION_STRING 環境変数 (単一の migrate-repo コマンドの場合は、代わりに --azure-storage-connection-string を使用できます) | ストレージ アカウントのアクセス キー接続文字列のみがサポートされています (SAS はサポートされていません)。 GitHub は、ストレージからアーカイブを削除しません。

1 つのリポジトリを移行する

1 つのリポジトリを移行するには、 gh gei migrate-repo コマンドを使用します。

Bash
gh gei migrate-repo \
  --github-source-org SOURCE_ORGANIZATION \
  --source-repo SOURCE_REPOSITORY \
  --github-source-api-url "$SOURCE_API_URL" \
  --github-target-org DESTINATION_ORGANIZATION \
  --target-repo DESTINATION_REPOSITORY \
  --target-api-url "$TARGET_API_URL" \
  --verbose

プレースホルダーを次の値に置き換えます。

プレースホルダー説明
SOURCE_ORGANIZATIONソース エンタープライズ内のリポジトリを所有する組織。
SOURCE_REPOSITORYソース組織のリポジトリの名前。
DESTINATION_ORGANIZATION移行先企業で移行されたリポジトリを所有する組織。
DESTINATION_REPOSITORY移行先組織の新しいリポジトリの名前。

例えば次が挙げられます。

Bash
gh gei migrate-repo \
  --github-source-org source-org \
  --source-repo example-repository \
  --github-source-api-url "$SOURCE_API_URL" \
  --github-target-org destination-org \
  --target-repo example-repository \
  --target-api-url "$TARGET_API_URL" \
  --verbose

--target-repoを省略すると、GEI はソース リポジトリ名を使用します。

省略可能な引数。

移行コマンドには、次のオプションを追加できます。

Argument説明
--target-repo-visibility TARGET-VISIBILITY新しいリポジトリの可視性を設定します。 サポートされている値は、private および internal です。
--skip-releasesリリースなしでリポジトリを移行します。
--queue-only移行の完了を待たずに、移行をキューに追加します。
--verbose追加の移行出力を表示します。

例えば次が挙げられます。

Bash
gh gei migrate-repo \
  --github-source-org source-org \
  --source-repo example-repository \
  --github-source-api-url "$SOURCE_API_URL" \
  --github-target-org destination-org \
  --target-repo example-repository \
  --target-api-url "$TARGET_API_URL" \
  --target-repo-visibility internal \
  --verbose

複数のリポジトリを移行する

複数のリポジトリの場合は、 gh gei generate-scriptを使用します。

Bash
gh gei generate-script \
  --github-source-org SOURCE_ORGANIZATION \
  --github-target-org DESTINATION_ORGANIZATION \
  --github-source-api-url "$SOURCE_API_URL" \
  --target-api-url "$TARGET_API_URL" \
  --output migration-script.ps1

生成されたスクリプトを実行する前に確認します。 次のようにすることができます。

  • 移行すべきでないリポジトリを削除します。
  • 宛先リポジトリ名を変更します。
  • 宛先リポジトリの可視性を変更します。
  • --skip-releasesなどのオプションを追加します。
  • 移行ごとにログをダウンロードする --download-migration-logs を追加します。

生成されたスクリプトを PowerShell で実行します。

Bash
pwsh ./migration-script.ps1

移行の状態を確認する

--queue-onlyを使用して移行を開始した場合は、GEI によって出力された移行 ID を使用して監視します。

Bash
gh gei wait-for-migration \
  --migration-id MIGRATION_ID \
  --target-api-url "$TARGET_API_URL" \
  --verbose

MIGRATION_IDを、gh gei migrate-repoによって返される ID に置き換えます。

メモ

チェック時に両方の API URL 引数を含めます。 ソース側の移行情報とログを取得する GEI コマンドには、ソース API URL が必要です。

移行ログのダウンロード

移行ログをダウンロードするには:

Bash
gh gei download-logs \
  --migration-id MIGRATION_ID \
  --github-source-api-url "$SOURCE_API_URL" \
  --target-api-url "$TARGET_API_URL"

移行が成功と報告された場合でも、ログで警告とエラーを確認します。

移行を中止する

キューに入っている、または実行中の移行を中止するには:

Bash
gh gei abort-migration \
  --migration-id MIGRATION_ID \
  --github-source-api-url "$SOURCE_API_URL" \
  --target-api-url "$TARGET_API_URL"

Troubleshooting

ソース テナントに接続できません

次のことを確認します。

  • --github-source-api-url はソース サブドメインに設定されます。
  • URL は https://api.SUBDOMAIN.ghe.com形式を使用します。
  • ソース トークンは GH_SOURCE_PATに格納されます。
  • トークンは、ソース組織とリポジトリにアクセスできます。

移行先テナントに到達できません

次のことを確認します。

  • --target-api-url は宛先サブドメインに設定されます。
  • URL は https://api.SUBDOMAIN.ghe.com形式を使用します。
  • 宛先トークンは、 GH_PATに格納されます。
  • 宛先組織にリポジトリを作成するアクセス許可がある。

アーカイブの生成またはアップロード中に移行が失敗する

移行の出力とログを確認し、次のことを確認します。

  • 移行アーカイブ ストレージが正しく構成されています。
  • ストレージ プロバイダーは、移行サービスからアクセスできます。
  • 移行中にソース リポジトリが変更されていません。
  • ソース API URL と宛先 API URL がスワップされていません。

ログをダウンロードできない

download-logs、wait-for-migration、またはabort-migrationを使用する場合は、移行の開始に使用するのと同じソース API URL と移行先 API URL を指定します。

--github-source-api-url "$SOURCE_API_URL" \
--target-api-url "$TARGET_API_URL"

ソース URL が拒否される

GHE.com エンドポイントではなく、GitHub Enterprise Server サブドメイン API エンドポイントを使用していることを確認します。

次のコマンドを使用します。

https://api.SUBDOMAIN.ghe.com

使用しないでください:

https://HOSTNAME/api/v3

/api/v3形式はGitHub Enterprise Serverソースを対象としており、データ所在地付き GitHub Enterprise Cloudの正しい形式ではありません。