◀ 用語一覧
NO.31

🚚 Migrations

移行(Migrations)

更新: 2026.10.26

一言で

EMU ↔ 非 EMU は設定変更ではなく、新しい Enterprise への移行。ツールは GEI。

GHES → GHE.com は、止められない repo を ELM(ライブ移行)、残りを GEI で移す。

移行パス早見表 📖 Docs

4 つのケースを列に並べた。+ で見たい項目を開く。

ツールGEI / ELMDocs
Non-EMU → EMUEMU → Non-EMUGHES → GHE.com (ELM)GHES → GHE.com (GEI)
ツールGEI(GitHub Enterprise Importer)ELM(Enterprise Live Migrations、2026-09 GA)GEI
コマンドgh gei migrate-org または gh gei migrate-repogh elmgh gei migrate-repo
移行単位org か repo かDocs
Non-EMU → EMUEMU → Non-EMUGHES → GHE.com (ELM)GHES → GHE.com (GEI)
単位org ごと(5,000 repo まで)または repo ごと1 回に 1 reporepo ごとのみ(GHES から org 単位では移せない)
Teamorg 移行なら team と repo 権限も移る(メンバーは移らない)移らない。移行先で作り直す
ダウンタイムELM は数分Docs
Non-EMU → EMUEMU → Non-EMUGHES → GHE.com (ELM)GHES → GHE.com (GEI)
作業停止移行中は作業を止める(差分同期なし)カットオーバーのみ(数分)。それまで移行元 repo を使えるrepo ごとに移行中は止める
前提条件Enterprise / ID / PATDocs
Non-EMU → EMUEMU → Non-EMUGHES → GHE.com (ELM)GHES → GHE.com (GEI)
移行先新しい EMU Enterprise新しい個人アカウント型 EnterpriseGHE.com の Enterprise(EMU 必須)
IDIdP で SAML / OIDC + SCIM各ユーザーが個人アカウントを用意(SAML は任意)IdP で SAML / OIDC + SCIM
実行者移行元 org owner(または migrator role)+ 移行先 enterprise ownerGHES site admin + GHE.com enterprise owner移行元 org owner + 移行先 migrator role
トークンclassic PAT(移行元と移行先の両方)
環境org 名の重複を避ける(rename)GHES 3.17+ の対応パッチ、HTTPS、外向き通信、migrations 有効化GHES 3.4.1+、blob storage
移行されないもの手動で再設定Docs
Non-EMU → EMUEMU → Non-EMUGHES → GHE.com (ELM)GHES → GHE.com (GEI)
対象外team メンバー、Actions の secrets / variables / runner、Packages、Projects、GitHub Apps、rulesets、custom properties、セキュリティアラート、LFS オブジェクト、PAT / SSH キー、ユーザー所有の repoorg 設定、team、Projects、org webhook、rulesets、fork からの PR、未送信のレビューGEI 共通(左と同じ)
部分的branch protection の一部ルールbranch protection(許可ユーザーや bypass は移らない)branch protection の一部ルール
上限40 GiB / 2 GBDocs
Non-EMU → EMUEMU → Non-EMUGHES → GHE.com (ELM)GHES → GHE.com (GEI)
サイズrepo あたり Git 40 GiB + メタデータ 40 GiB(public preview)、ファイル 400 MiB巨大 monorepo に対応。release asset は 1 個 2 GB までGHES 3.13+ で 40 GiB(それより古い版は上限が小さい)
その他org 移行は 5,000 repo まで並列は GHES 1 台 10 件、移行先 enterprise 20 件。移行中の force push は避ける約 40 GB を超える複雑な repo は Expert Services を推奨
移行後の作業mannequin の再割当Docs
Non-EMU → EMUEMU → Non-EMUGHES → GHE.com (ELM)GHES → GHE.com (GEI)
ユーザーmannequin を managed user に再割当、IdP で team 同期mannequin を個人アカウントに再割当、team メンバーを追加mannequin を managed user に再割当、IdP で team 同期
設定各自が PAT / SSH キーを再作成、旧 Enterprise の請求を切り替えorg 設定と team を作り直し、branch protection を確認team と repo 権限を作り直す

できないこと 📖 Docs

どのケースでも、次の近道は使えない。

❌ できないこと✅ 代わりに
Enterprise の種類(EMU ↔ 非 EMU)をその場で変更新しい Enterprise を作り、GEI で移行
「Transfer organization」で EMU Enterprise へ/から org を移動GEI の migrate-org
ghe-migrator でクラウドへ移行(GHES → GHES 専用)GEI か ELM
ELM で GitHub.com(データレジデンシーなし)へ移行GEI(ELM の移行先は GHE.com のみ)
GHE.com → GitHub.com を公式ツールで移行GitHub Expert Services
GEI の上限を超える repo をそのまま移行Git の履歴だけ push、Expert Services、GHES からなら ELM

GHES → GHE.com:ELM と GEI 📖 Docs

同じ移行の中で併用できる。repo ごとに選ぶ。

ELMGEI
⏱️ ダウンタイムカットオーバーのみ(数分)移行中は repo を止める
🎯 向いている repo巨大 monorepo、止められない重要 repo短い停止を許容できる一般的な repo
🔀 並列数GHES 1 台 10 件、移行先 20 件ELM より多い
🗂️ Git LFS移行される移行されない(後から push)
🧩 GHES バージョン3.17+ の対応パッチ3.4.1+
💾 中間ストレージ不要blob storage(GHES 3.8+)
🌐 移行先GHE.com のみGitHub.com / GHE.com

⚠️ 移行中は force push しない(ELM が解決できない形で履歴が壊れる)。public repo は GHE.com に置けないので、事前に private / internal へ変更する。

EMU の種類を切り替える手順 📖 Docs

Non-EMU → EMU も EMU → Non-EMU も、流れは同じ。

  1. 🏢 新しい Enterprise を作る(トライアル可)。既存の Enterprise は変換できない
  2. 🔐 ID を準備:EMU なら IdP で SAML / OIDC と SCIM、Non-EMU なら各自の個人アカウント
  3. 🏷️ org 名を決める:github.com の org 名は全体で一意。移行先で別名にするか、移行元を rename して名前を空ける
  4. 🧪 試行移行 → 本番:GEI の migrate-org で試し、本番は作業を止めて実行。ruleset に「Repository migrations」の bypass を追加
  5. 👤 ユーザーを戻す:mannequin を再割当し、team メンバーを同期。各自 PAT / SSH キーを作り直す
  6. 💳 請求を切り替える:移行完了後、GitHub の営業と旧 Enterprise の停止を調整
スライド Eng