Using the Migrations API, you can export an organization's repositories. After exporting your repositories, you'll download the migration archive that's used for the import process.
To export repository data from GitHub.com, use the Migrations API.
The Migrations API is currently in a preview period, which means that the endpoints and parameters may change in the future. To access the Migrations API, you must provide a custom media type in the Accept
header: application/vnd.github.wyandotte-preview+json
. The examples below include the custom media type.
Generating a migration archive
Note: Locking a repository prevents users from pushing to the repository or modifying a repository's resources, like issues, labels, milestones, wikis, and comments. New teams and collaborators can't be associated with a locked repository.
If you're performing a trial run, you don't need to lock repositories. Otherwise, it's highly recommended.
Notify members of your organization that you'll be performing a migration. The export can take several minutes, depending on the number of repositories being exported. The full migration including import may take several hours so we recommend doing a trial run in order to determine how long the full process will take.
-
Start a migration by
POST
ing to the migration endpoint. You'll need:- Your access token for authentication
-
A list of the repositories you want to migrate
curl -H "Authorization: token GITHUB_ACCESS_TOKEN" -X POST \ -H "Accept: application/vnd.github.wyandotte-preview+json" \ -d'{"lock_repositories":true,"repositories":["orgname/reponame", "orgname/reponame"]}' \ https://api.github.com/orgs/orgname/migrations
If you want to lock the repositories before migrating them, make sure
lock_repositories
is set totrue
. This is highly recommended.
This request returns a unique
id
which represents your migration. You'll need it for subsequent calls to the Migrations API. -
Send a
GET
request to the migration status endpoint to fetch the status of a migration. You'll need:- Your access token for authentication
- The unique
id
of the migrationcurl -H "Authorization: token GITHUB_ACCESS_TOKEN" \ -H "Accept: application/vnd.github.wyandotte-preview+json" \ https://api.github.com/orgs/orgname/migrations/id
A migration can be in one of the following states:
-
pending
, which means the migration hasn't started yet. -
exporting
, which means the migration is in progress. -
exported
, which means the migration finished successfully. -
failed
, which means the migration failed.
-
After your migration has exported, download the migration archive by sending a
GET
request to the migration download endpoint. You'll need:- Your access token for authentication
- The unique
id
of the migrationcurl -H "Accept: application/vnd.github.wyandotte-preview+json" \ -u GITHUB_USERNAME:GITHUB_ACCESS_TOKEN \ -L -o migration_archive.tar.gz \ https://api.github.com/orgs/orgname/migrations/id/archive
-
The migration archive is automatically deleted after seven days. If you would prefer to delete it sooner, you can send a
DELETE
request to the migration archive delete endpoint. You'll need:- Your access token for authentication
- The unique
id
of the migrationcurl -H "Authorization: token GITHUB_ACCESS_TOKEN" -X DELETE \ -H "Accept: application/vnd.github.wyandotte-preview+json" \ https://api.github.com/orgs/orgname/migrations/id/archive
To import the archived migration data to a GitHub Enterprise instance, see "Importing migration data to GitHub Enterprise".