Skip to main content

GitHub Enterprise Server へのデータの移行

移行アーカイブを作成すると、ターゲットの GitHub Enterprise Server インスタンスにデータをインポートできます。 変更を恒久的にターゲットのインスタンスに適用する前に、潜在的なコンフリクトがないか変更をレビューできます。

移行データの準備

  1.        [
           `scp`
           ](https://acloudguru.com/blog/engineering/ssh-and-scp-howto-tips-tricks#scp) コマンドを使用して、ソース インスタンスまたは組織から生成された移行アーカイブを GitHub Enterprise Server ターゲットにコピーします。
    
    scp -P 122 PATH-TO-MIGRATION-GUID.tar.gz admin@HOSTNAME:/home/admin/
    
  2. ターゲットの GitHub Enterprise Server インスタンスに SSH で接続します。 詳しくは、「管理シェル (SSH) にアクセスする」をご覧ください。

    ssh -p 122 admin@HOSTNAME
    
  3. 移行アーカイブに十分な読み取りアクセス許可があることを確認します。

    chmod 644 /home/admin/MIGRATION-GUID.tar.gz
    
  4.        `ghe-migrator prepare` コマンドを使ってターゲット インスタンスにインポートするためのアーカイブを準備し、以降の手順で使用する新しい移行 GUID を生成します。
    
    ghe-migrator prepare /home/admin/MIGRATION-GUID.tar.gz
    
    • 新しいインポートの試行を開始するには、もう一度 ghe-migrator prepare を実行し、新しい移行 GUID を取得します。
    • 移行ファイルをステージングする場所を指定するには、--staging-path=/full/staging/path を使用してコマンドを追加します。 既定値は /data/user/tmp です。

移行のコンフリクトのリストの生成

  1. 移行 GUID を指定した ghe-migrator conflicts コマンドを使用して、conflicts.csv ファイルを生成します。

    ghe-migrator conflicts -g MIGRATION-GUID > conflicts.csv
    
    • 競合が報告されない場合、データを安全にインポートできます。
  2. 競合がある場合は、scp コマンドを使用して、conflicts.csv をローカル コンピューターにコピーします。

    scp -P 122 admin@HOSTNAME:conflicts.csv ~/Desktop
    
  3. 移行コンフリクトの解決もしくはカスタム マッピングのセットアップ」に進みます。

移行コンフリクトのレビュー

  1. テキスト エディターまたは CSV 互換のスプレッドシート ソフトウェアを使用して、conflicts.csv を開きます。

  2. 以下の例と参照表のガイダンスを使用して、conflicts.csv ファイルを確認し、確実にインポート時に適切なアクションが実行されるようにします。

           _conflicts.csv_ ファイルには、競合の ''_移行マップ_'' と推奨アクションが含まれています。 移行マップは、ソースから移行されるデータと、そのデータがどのようにターゲットに適用されるかのリストです。
    
model_namesource_urltarget_urlrecommended_action
userhttps://example-gh.source/octocathttps://example-gh.target/octocatmap
organizationhttps://example-gh.source/octo-orghttps://example-gh.target/octo-orgmap
repositoryhttps://example-gh.source/octo-org/widgetshttps://example-gh.target/octo-org/widgetsrename
teamhttps://example-gh.source/orgs/octo-org/teams/adminshttps://example-gh.target/orgs/octo-org/teams/adminsmerge
          _conflicts.csv_ の各行には次の情報が示されます。
名前説明
model_name変更されるデータの種類。
source_urlデータのソースURL。
target_url期待されるデータのターゲットURL。
recommended_actionデータのインポート時に推奨されるアクション ghe-migrator が実行されます。

各レコードタイプで可能なマッピング

データの転送時に ghe-migrator で実行できるいくつかの異なるマッピング アクションがあります。

action説明適用可能なモデル
import(デフォルト)ソースからのデータがターゲットにインポートされます。すべてのレコードタイプ
mapソース データに基づいて新しいモデルを作成する代わりに、ターゲット内の既存のレコードが使用されます。 リポジトリを既存の組織にインポートしたり、ターゲットのユーザー ID をソースのユーザー ID にマッピングしたりする場合に便利です。ユーザー、組織
renameソースからのデータは名前が変更されてターゲットにコピーされます。Users、organizations、repositories
map_or_renameターゲットが存在する場合、そのターゲットにマップします。 そうでない場合はインポートされたモデルの名前を変更します。ユーザー
mergeソースからのデータはターゲット上の既存のデータと組み合わされます。Teams
          **
          _conflicts.csv_ ファイルを確認し、`ghe-migrator audit` を使用して、確実に適切なアクションが実行されるようにすることを強くお勧めします。** すべてが良好な場合、続行できます。

移行コンフリクトの解決もしくはカスタムマッピングのセットアップ

          `ghe-migrator` で正しくない変更が行われると思われる場合は、_conflicts.csv_ 内でデータを変更することによって修正できます。 
          _conflicts.csv_ 内の任意の行を変更できます。

たとえば、ソースの octocat ユーザーがターゲットの octocat にマップされていることに気付いたとしましょう。

model_namesource_urltarget_urlrecommended_action
userhttps://example-gh.source/octocathttps://example-gh.target/octocatmap

このユーザをターゲット上の他のユーザにマップさせることができます。 octocat が実際にはターゲットの monalisa であるべきだとわかっているとします。 target_url の __ 列を monalisa を参照するように変更することができます。

model_namesource_urltarget_urlrecommended_action
userhttps://example-gh.source/octocathttps://example-gh.target/monalisamap

別の例として、octo-org/widgets リポジトリの名前をターゲット インスタンスの octo-org/amazing-widgets に変更する場合は、target_urlocto-org/amazing-widgets、および recommend_actionrename に変更します。

model_namesource_urltarget_urlrecommended_action
repositoryhttps://example-gh.source/octo-org/widgetshttps://example-gh.target/octo-org/amazing-widgetsrename

カスタムマッピングの追加

移行における一般的なシナリオは、移行されたユーザがターゲット上ではソース上とは異なるユーザ名を持つことです。

ソースのユーザ名のリストとターゲットのユーザー名のリストがあれば、カスタムマッピングのCSVファイルを構築し、各ユーザのユーザ名とコンテンツが移行の終了時点で正しく割り当てられているようにそのファイルを適用できます。

          `ghe-migrator audit` コマンドを使用して、カスタム マッピングを適用するために必要な CSV 形式で、移行されるユーザーの CSV をすばやく生成できます。
ghe-migrator audit -m user -g MIGRATION-GUID > users.csv

これで、その CSV を編集し、マップまたは名前を変更する各ユーザーの新しい URL を入力してから、4 番目の列を更新し、適宜、map または rename が含まれるようにすることができます。

たとえば、ユーザー octocat の名前をターゲット monalisahttps://example-gh.target に変更するには、次の内容の行を作成します。

model_namesource_urltarget_urlstate
userhttps://example-gh.source/octocathttps://example-gh.target/monalisarename

同じプロセスは、カスタムマッピングをサポートする各レコードのマッピングを作成するために使うことができます。 詳細については、レコードで可能なマッピングに関する表を参照してください。

修正された移行データの適用

  1. 変更を行った後、scp コマンドを使用して、変更した conflicts.csv (または正しい形式の他のマッピング .csv ファイル) をターゲット インスタンスに適用します。

    scp -P 122 ~/Desktop/conflicts.csv admin@HOSTNAME:/home/admin/
    
  2.        `ghe-migrator map` コマンドを使用して移行データを再マップし、変更した _.csv_ ファイルと移行 GUID へのパスを渡します。
    
    ghe-migrator map -i conflicts.csv -g MIGRATION-GUID
    
  3.        `ghe-migrator map -i conflicts.csv -g MIGRATION-GUID` コマンドで競合がまだ存在することが報告された場合は、移行の競合解決プロセスをもう一度実行します。
    

インポートしたデータを GitHub Enterprise Server に適用する

  1. ターゲットの GitHub Enterprise Server インスタンスに SSH で接続します。 詳しくは、「管理シェル (SSH) にアクセスする」をご覧ください。

    ssh -p 122 admin@HOSTNAME
    
  2.        `ghe-migrator import` コマンドを使用して、インポート プロセスを開始します。 必要なものは次のとおりです。
    
    $ ghe-migrator import /home/admin/MIGRATION-GUID.tar.gz -g MIGRATION-GUID -u USERNAME -p TOKEN
    
    > Starting GitHub::Migrator
    > Import 100% complete /
    
    • 移行ファイルをステージングする場所を指定するには、--staging-path=/full/staging/path を使用してコマンドを追加します。 既定値は /data/user/tmp です。

移行データのレビュー

既定では、ghe-migrator audit はすべてのレコードを返します。 また、以下の条件でレコードをフィルタリングすることもできます。

  • レコードのタイプ。
  • レコードの状態。

レコードの種類は、移行されたデータで見つかったものと一致します。

レコードタイプのフィルタ

レコード タイプフィルター名
ユーザーuser
組織organization
リポジトリrepository
Teamsteam
マイルストーンmilestone
問題issue
Issueのコメントissue_comment
Pull Requestpull_request
プルリクエストのレビューpull_request_review
コミットコメントcommit_comment
プルリクエストのレビューのコメントpull_request_review_comment
リリースrelease
プルリクエストまたはイシューに対して取られたアクションissue_event
保護されたブランチprotected_branch

レコードの状態フィルタ

レコードの状態説明
exportレコードはエクスポートされます。
importレコードはインポートされます。
mapレコードはマップされます。
renameレコードの名前が変更されます。
mergeレコードは統合されます。
exportedレコードはエクスポートに成功しました。
importedレコードはインポートに成功しました。
mappedレコードのマッピングが成功しました。
renamedレコードの名前の変更に成功しました。
mergedレコードは正常に統合されました。
failed_exportレコードはエクスポートに失敗しました。
failed_importレコードはインポートに失敗しました。
failed_mapレコードはマップに失敗しました。
failed_renameレコードの名前の変更に失敗しました。
failed_mergeレコードはマージに失敗しました。

監査されたレコードのフィルタリング

          `ghe-migrator audit` コマンドを使用すると、`-m` フラグを使用してレコードの種類に基づいてフィルター処理できます。 同様に、`-s` フラグを使用してインポート状態をフィルター処理できます。 次のようなコマンドです。
ghe-migrator audit -m RECORD_TYPE -s STATE -g MIGRATION-GUID

たとえば、インポートに成功したすべての組織とチームを見るには以下のようにします。

$ ghe-migrator audit -m organization,team -s mapped,renamed -g MIGRATION-GUID
> model_name,source_url,target_url,state
> organization,https://gh.source/octo-org/,https://ghe.target/octo-org/,renamed
          **失敗したすべてのインポートを監査することを強くお勧めします。** これを行うには、次のように入力します。
$ ghe-migrator audit -s failed_import,failed_map,failed_rename,failed_merge -g MIGRATION-GUID
> model_name,source_url,target_url,state
> user,https://gh.source/octocat,https://gh.target/octocat,failed
> repository,https://gh.source/octo-org/octo-project,https://ghe.target/octo-org/octo-project,failed

失敗したインポートに関する懸念がある場合は、GitHub Enterprise サポートにアクセスしてお問い合わせください。

GitHub Enterprise Server でインポートを完了する

ターゲットインスタンスへの移行が適用され、その内容を確認したら、リポジトリのロックを解除して、ソースから削除します。 ソースデータを削除する前に、すべてが期待どおりに機能していることを確認するため2週間ほど待つことをおすすめします。

ターゲットインスタンス上でのリポジトリのアンロック

データがインスタンスにSSHするための手順 %}データがインスタンスでアンロックするための手順 %}

警告

リポジトリに schedule トリガーを使う GitHub Actions ワークフローが含まれている場合、そのワークフローはインポート後に自動的に実行されません。 スケジュールされたワークフローをもう一度開始するには、リポジトリにコミットをプッシュします。 詳しくは、「ワークフローをトリガーするイベント」をご覧ください。

ソース上でのリポジトリのアンロック

移行が完了したら、ソースのリポジトリのロックを解除する必要があります。

GitHub.com で組織からリポジトリのロックを解除する

GitHub.com組織のリポジトリのロックを解除するには、DELETE 要求を移行ロック解除エンドポイントに送信します。 必要なものは次のとおりです。

  • 認証のためのアクセストークン
  •         `id`の移行の一意
    
  • アンロックするリポジトリの名前
curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" -X DELETE \
  -H "Accept: application/vnd.github.wyandotte-preview+json" \
  https://api.github.com/orgs/ORG-NAME/migrations/ID/repos/REPO_NAME/lock

GitHub.com で組織からリポジトリを削除する

GitHub.com組織のリポジトリのロックを解除した後、リポジトリ削除エンドポイントを使用して以前に移行したすべてのリポジトリを削除する必要があります。 認証のためのアクセストークンが必要になります。

curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" -X DELETE \
  https://api.github.com/repos/ORG-NAME/REPO_NAME

GitHub Enterprise Server インスタンスからリポジトリをアンロックする

データがインスタンスにSSHするための手順 %}データがインスタンスでアンロックするための手順 %}