About organization migrations with GitHub Enterprise Importer
Migrations to GitHub Enterprise Cloud include migrations between accounts on GitHub.com and, if you're adopting data residency, migrations to your enterprise's subdomain of GHE.com.
You can run your migration with either the GitHub CLI or the API.
The GitHub CLI simplifies the migration process and is recommended for most customers. Advanced customers with heavy customization needs can use the API to build their own integrations with GitHub Enterprise Importer.
Prerequisites
- We strongly recommend that you perform a trial run of your migration and complete your production migration soon after. To learn more about trial runs, see Overview of a migration between GitHub products.
- Ensure you understand the data that will be migrated and the known support limitations of the Importer. For more information, see About migrations between GitHub products.
- While not required, we recommend halting work during your production migration. The Importer doesn't support delta migrations, so any changes that happen during the migration will not migrate. If you choose not to halt work during your production migration, you'll need to manually migrate these changes.
- For the source organization, you must be an organization owner or have the migrator role. For more information, see Managing access for a migration between GitHub products.
- For the destination enterprise account, you must be an enterprise owner.
Step 0: Get ready to use the GitHub GraphQL API
To make GraphQL queries, you'll need to write your own scripts or use an HTTP client like Insomnia.
To learn more about getting started with the GitHub GraphQL API, including how to authenticate, see Forming calls with GraphQL.
You will send all GraphQL queries to the destination of your migration. If you're migrating to GitHub Enterprise Cloud with data residency, make sure to send queries to the endpoint for your enterprise's subdomain of GHE.com.
Step 1: Get the enterprise ID for your migration destination
As an enterprise owner in GitHub.com, use the following query to return the ID for the enterprise account you want to own the migrated organization. You'll need the enterprise ID to identify your migration destination.
query(
$slug: String!
){
enterprise (slug: $slug)
{
slug
id
}
}
Query variable | Description |
---|---|
slug | The slug for your enterprise account, which you can identify by looking at the URL for your enterprise, https:/ or https:/ . |
Step 2: Start your organization migration
When you start a migration, a single organization and its accompanying data migrates into a brand new organization within the destination enterprise that you identify.
mutation startOrganizationMigration (
$sourceOrgUrl: URI!,
$targetOrgName: String!,
$targetEnterpriseId: ID!,
$sourceAccessToken: String!,
$targetAccessToken: String!
){
startOrganizationMigration( input: {
sourceOrgUrl: $sourceOrgUrl,
targetOrgName: $targetOrgName,
targetEnterpriseId: $targetEnterpriseId,
sourceAccessToken: $sourceAccessToken,
targetAccessToken: $targetAccessToken
}) {
orgMigration {
id
}
}
}
Query variable | Description |
---|---|
sourceOrgUrl | The URL of the source organization, such as https:/ . |
targetOrgName | The name you want the new organization to have. Cannot be shared by another organization on your destination platform. |
target | The ID of the enterprise that you want to create the new organization in, returned by step 2. |
sourceAccessToken | Your personal access token (classic) for the source organization. For requirements, see Managing access for a migration between GitHub products. |
targetAccessToken | Your personal access token (classic) for the destination enterprise. |
In the next step, you'll use the migration ID returned from the startOrganizationMigration
mutation to check the migration status.
Step 3: Check the status of your migration
To detect any migration failures and ensure your migration is working, you can query the OrganizationMigration
(s) that you have created to see the migration status using the getMigration
query.
The query will return with a status to let you know if the migration is queued
, in progress
, failed
, or completed
, plus information about how many repositories are waiting to be migrated. If your migration failed, the Importer will provide a reason for the failure.
query (
$id: ID!
){
node( id: $id ) {
... on OrganizationMigration {
id
sourceOrgUrl
targetOrgName
state
failure_reason
remaining_repositories_count
total_repositories_count
}
}
}
Query variable | Description |
---|---|
id | The id of your migration. |
After your migration has finished, we recommend that you check the migration log repository. For more information, see Accessing your migration logs for GitHub Enterprise Importer.
Finally, we recommend you perform a soundness check of your organization and migrated repositories.