About repository migrations with GitHub Enterprise Importer
Puedes ejecutar la migración con la GitHub CLI o la API.
La GitHub CLI simplifica el proceso de migración y se recomienda para la mayoría de los clientes. Los clientes avanzados con necesidades de personalización intensivas pueden usar la API para crear sus propias integraciones con 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 from Azure DevOps to GitHub Enterprise Cloud.
- Asegúrate de comprender los datos que se migrarán y las limitaciones de compatibilidad conocidas del importador. For more information, see About migrations from Azure DevOps to GitHub Enterprise Cloud.
- Aunque no es necesario, se recomienda detener el trabajo durante la migración de producción. Importer no admite migraciones diferenciales, por lo que los cambios que se produzcan durante la migración no se migrarán. Si decides no detener el trabajo durante la migración de producción, tendrás que migrar manualmente estos cambios.
- For the destination organization on GitHub, you need to be an organization owner or have the migrator role. For more information about the migrator role, see Managing access for a migration from Azure DevOps.
Step 0: Get ready to use the GitHub GraphQL API
Para realizar consultas de GraphQL, tendrás que escribir scripts propios, o bien usar un cliente HTTP como Insomnia.
Para más información sobre cómo empezar a trabajar con GraphQL API de GitHub, incluido cómo autenticarse, consulta Formar llamados con GraphQl.
Enviarás todas las consultas de GraphQL al destino de tu migración. Si vas a migrar a Nube de GitHub Enterprise con residencia de datos, asegúrate de enviar consultas al punto de conexión del subdominio de la empresa de GHE.com.
Step 1: Get the ownerId for your migration destination
Como propietario de la organización en GitHub Enterprise Cloud, usa la consulta GetOrgInfo para devolver ownerId, también denomino id. de organización, para la organización que quieras que posea los repositorios migrados. Necesitarás el valor ownerId para identificar el destino de la migración.
Consulta GetOrgInfo
query(
$login: String!
){
organization (login: $login)
{
login
id
name
databaseId
}
}
| Variable de consulta | Descripción |
|---|---|
login | El nombre de la organización. |
Respuesta GetOrgInfo
{
"data": {
"organization": {
"login": "Octo",
"id": "MDEyOk9yZ2FuaXphdGlvbjU2MTA=",
"name": "Octo-org",
"databaseId": 5610
}
}
}
En este ejemplo, MDEyOk9yZ2FuaXphdGlvbjU2MTA= es el id. de la organización o ownerId, que se usará en el paso siguiente.
Step 2: Identify where you're migrating from
Puedes configurar un origen de migración mediante la consulta createMigrationSource. Tendrás que proporcionar el valor ownerId, o id. de organización, recopilado de la consulta GetOrgInfo.
Your migration source is your ADO organization.
createMigrationSource mutation
mutation createMigrationSource($name: String!, $ownerId: ID!) {
createMigrationSource(input: {name: $name, url: "https://dev.azure.com", ownerId: $ownerId, type: AZURE_DEVOPS}) {
migrationSource {
id
name
url
type
}
}
}
Nota:
Asegúrate de usar AZURE_DEVOPS para type.
| Variable de consulta | Descripción |
|---|---|
name | Nombre para el origen de la migración. Este nombre es para referencia propia, por lo que puedes usar cualquier cadena. |
ownerId | El id. de la organización en GitHub Enterprise Cloud. |
createMigrationSource response
{
"data": {
"createMigrationSource": {
"migrationSource": {
"id": "MS_kgDaACQxYmYxOWU4Yi0wNzZmLTQ3NTMtOTdkZC1hNGUzZmYxN2U2YzA",
"name": "Azure Devops Source",
"url": "https://dev.azure.com",
"type": "AZURE_DEVOPS"
}
}
}
}
In this example, MS_kgDaACQxYmYxOWU4Yi0wNzZmLTQ3NTMtOTdkZC1hNGUzZmYxN2U2YzA is the migration source ID, which we'll use in the next step.
Step 3: Start your repository migration
Al iniciar una migración, un único repositorio y sus datos adjuntos se migran a un repositorio nuevo de GitHub que identifiques.
Si quieres mover varios repositorios a la vez desde la misma organización de origen, puedes poner en cola varias migraciones. Puedes ejecutar hasta cinco migraciones de repositorio a la vez.
startRepositoryMigration mutation
mutation startRepositoryMigration (
$sourceId: ID!,
$ownerId: ID!,
$sourceRepositoryUrl: URI!,
$repositoryName: String!,
$continueOnError: Boolean!,
$accessToken: String!,
$githubPat: String!,
$targetRepoVisibility: String!
){
startRepositoryMigration( input: {
sourceId: $sourceId,
ownerId: $ownerId,
repositoryName: $repositoryName,
continueOnError: $continueOnError,
accessToken: $accessToken,
githubPat: $githubPat,
targetRepoVisibility: $targetRepoVisibility
sourceRepositoryUrl: $sourceRepositoryUrl,
}) {
repositoryMigration {
id
migrationSource {
id
name
type
}
sourceUrl
}
}
}
| Variable de consulta | Descripción |
|---|---|
sourceId | El origen de migración id devuelto por la mutación createMigrationSource. |
ownerId | El id. de la organización en GitHub Enterprise Cloud. |
repositoryName | Un nombre de repositorio único personalizado que actualmente no se use en ninguno de los repositorios propiedad de la organización en GitHub Enterprise Cloud. Se creará una incidencia de registro de errores en este repositorio cuando se complete la migración o se haya detenido. |
continueOnError | Valor de migración que permite que continúe al encontrar errores que no hacen que se produzca un error en la migración. Debe ser true o false. Se recomienda encarecidamente establecer continueOnError en true para que la migración continúe a menos que Importer no pueda mover el origen de Git o Importer haya perdido la conexión y no se pueda volver a conectar para completar la migración. |
githubPat | El valor personal access token de la organización de destino en GitHub Enterprise Cloud. |
accessToken | El valor personal access token para el origen. |
targetRepoVisibility | La visibilidad del nuevo repositorio. Debe ser private, public o internal. Si no se establece, el repositorio se migra como privado. |
sourceRepositoryUrl | The URL of your source repository, using the format https://dev.azure.com/{organization}/{project}/_git/{repository}. |
For personal access token requirements, see Managing access for a migration from Azure DevOps.
En el paso siguiente, usarás el id. de migración devuelto por la mutación startRepositoryMigration para comprobar el estado de la migración.
Step 4: Check the status of your migration
Para detectar errores de migración y asegurarse de que la migración funciona, puedes comprobar el estado de la migración mediante la consulta getMigration. También puedes comprobar el estado de varias migraciones con getMigrations.
La consulta getMigration devolverá con un estado para que sepas si la migración es queued, in progress, failed o completed. Si se ha producido un error en la migración, en Importer se proporcionará un motivo para el error.
Consulta getMigration
query (
$id: ID!
){
node( id: $id ) {
... on Migration {
id
sourceUrl
migrationSource {
name
}
state
failureReason
}
}
}
| Variable de consulta | Descripción |
|---|---|
id | El valor id de la migración que ha devuelto la mutación startRepositoryMigration. |
Step 5: Validate your migration and check the error log
Para finalizar la migración, se recomienda comprobar la incidencia "Registro de migración". Esta incidencia se crea en GitHub en el repositorio de destino.

Por último, se recomienda revisar los repositorios migrados para obtener una comprobación de solidez.
Step 1: Install the ADO2GH extension of the GitHub CLI
If this is your first migration, you'll need to install the ADO2GH extension of the GitHub CLI. For more information about GitHub CLI, see Acerca del CLI de GitHub.
Como alternativa, puede descargar un binario independiente desde la página de versiones del repositorio github/gh-ado2gh. Puede ejecutar el archivo binario directamente, sin el prefijo gh.
-
Instala la GitHub CLI. A fin de obtener instrucciones de instalación para GitHub CLI, vea el repositorio de GitHub CLI.
Nota:
Necesitas la versión 2.4.0 o posterior de GitHub CLI. Puedes comprobar la versión instalada con el comando
gh --version. -
Install the ADO2GH extension.
Shell gh extension install github/gh-ado2gh
gh extension install github/gh-ado2gh
Cada vez que necesites ayuda con ADO2GH extension, puedes usar la marca --help con un comando. Por ejemplo, gh ado2gh --help enumerará todos los comandos disponibles y gh ado2gh migrate-repo --help todas las opciones disponibles para el comando migrate-repo.
Step 2: Update the ADO2GH extension of the GitHub CLI
The ADO2GH extension of the GitHub CLI is updated weekly. Para asegurarte de que usas la versión más reciente, actualiza la extensión.
gh extension upgrade github/gh-ado2gh
gh extension upgrade github/gh-ado2gh
Step 3: Set environment variables
Before you can use the ADO2GH extension to migrate to GitHub Enterprise Cloud, you must create personal access tokens that can access the source and destination organizations, then set the personal access tokens as environment variables.
-
Create and record a personal access token (classic) that will authenticate for the destination organization on GitHub Enterprise Cloud, making sure that the token meets all requirements. For more information, see Managing access for a migration from Azure DevOps.
-
Create and record a personal access token that will authenticate for the source organization on Azure DevOps, making sure that this token meets all requirements. For more information, see Managing access for a migration from Azure DevOps.
-
Set environment variables for the personal access tokens, replacing TOKEN in the commands below with the personal access tokens you recorded above. Use
GH_PATfor the destination organization andADO_PATfor the source organization.-
If you're using Terminal, use the
exportcommand.Shell export GH_PAT="TOKEN" export ADO_PAT="TOKEN"
export GH_PAT="TOKEN" export ADO_PAT="TOKEN" -
If you're using PowerShell, use the
$envcommand.Shell $env:GH_PAT="TOKEN" $env:ADO_PAT="TOKEN"
$env:GH_PAT="TOKEN" $env:ADO_PAT="TOKEN"
-
-
Si vas a migrar a Nube de GitHub Enterprise con residencia de datos, para mayor comodidad, establece una variable de entorno para ladirección URL de la API base para tu empresa.
-
Si usas Terminal, utiliza el comando
export.Shell export TARGET_API_URL="https://api.SUBDOMAIN.ghe.com"
export TARGET_API_URL="https://api.SUBDOMAIN.ghe.com" -
Si usas PowerShell, utiliza el comando
$env.Shell $env:TARGET_API_URL="https://api.SUBDOMAIN.ghe.com"
$env:TARGET_API_URL="https://api.SUBDOMAIN.ghe.com"
Importante
Asegúrese de reemplazar
SUBDOMAINpor el subdominio de la empresa.Por ejemplo, si el subdominio de la empresa es
acme, elTARGET_API_URLvalor seríahttps://api.acme.ghe.com.Usarás esta variable con la opción
--target-api-urlen los comandos que ejecutes con la GitHub CLI. -
Step 4: Generate a migration script
Si quieres migrar varios repositorios a GitHub Enterprise Cloud a la vez, usa la GitHub CLI para generar un script de migración. El script resultante contendrá una lista de comandos de migración, uno por cada repositorio.
Nota:
La generación de un script da como resultado un script de PowerShell. Si usas Terminal, tendrás que generar el script con la extensión de archivo .ps1 e instalar PowerShell para Mac o Linux para ejecutarlo.
If you want to migrate a single repository, skip to the next step.
Generating a migration script
To generate a migration script, run the gh ado2gh generate-script command.
gh ado2gh generate-script --ado-org SOURCE --github-org DESTINATION --output FILENAME
gh ado2gh generate-script --ado-org SOURCE --github-org DESTINATION --output FILENAME
Placeholders
Reemplaza los marcadores de posición del comando anterior por los valores siguientes.
| Marcador de posición | Value |
|---|---|
| SOURCE | Nombre de la organización de origen |
| DESTINATION | Nombre de la organización de destino |
| FILENAME | Nombre de archivo para el script de migración resultante Si usas Terminal, utiliza una extensión de archivo .ps1, ya que el script generado necesita que se ejecute PowerShell. Puedes instalar PowerShell para Mac o Linux. |
Additional arguments
| Argument | Description |
|---|---|
--target-api-url TARGET-API-URL | Si vas a migrar a GHE.com, agrega --target-api-url TARGET-API-URL, donde TARGET-API-URL es la dirección URL de la API base para el subdominio de la empresa. Por ejemplo: https://api.octocorp.ghe.com. |
--all | Add additional functionality to the script, such as rewiring pipelines, creating teams, and configuring Azure Boards integrations. |
--download-migration-logs | Download the migration log for each migrated repository. For more information about migration logs, see Acceso a los registros de migración para GitHub Enterprise Importer. |
Reviewing the migration script
Después de generar el script, revisa el archivo y, opcionalmente, edita el script.
- Si hay repositorios que no quieras migrar, elimina o convierte en comentario las líneas correspondientes.
- Si quieres que los repositorios tengan otro nombre en la organización de destino, actualiza el valor de la marca
--target-repocorrespondiente. - Si desea cambiar la visibilidad del nuevo repositorio, actualice el valor de la marca
--target-repo-visibilitycorrespondiente. De manera predeterminada, el script establece la misma visibilidad que el repositorio de origen.
Si descargó ADO2GH como un binario independiente en lugar de como una extensión para los GitHub CLI, deberá actualizar el script generado para ejecutar el binario en lugar de gh ado2gh.
Step 5: Migrate repositories
You can migrate multiple repositories with a migration script or a single repository with the gh ado2gh migrate-repo command.
Migrate multiple repositories
Para migrar varios repositorios, ejecuta el script que has generado antes. Reemplaza FILENAME en los comandos siguientes por el nombre de archivo que has proporcionado al generar el script.
-
Si usas Terminal, utiliza
./.Shell ./FILENAME
./FILENAME -
Si usas PowerShell, utiliza
.\.Shell .\FILENAME
.\FILENAME
Migrate a single repository
To migrate a single repository, use the gh ado2gh migrate-repo command.
gh ado2gh migrate-repo --ado-org SOURCE --ado-team-project TEAM-PROJECT --ado-repo CURRENT-NAME --github-org DESTINATION --github-repo NEW-NAME
gh ado2gh migrate-repo --ado-org SOURCE --ado-team-project TEAM-PROJECT --ado-repo CURRENT-NAME --github-org DESTINATION --github-repo NEW-NAME
Nota:
Si vas a migrar a GHE.com, agrega --target-api-url TARGET-API-URL, donde TARGET-API-URL es la dirección URL de la API base para el subdominio de la empresa. Por ejemplo: https://api.octocorp.ghe.com.
Reemplaza los marcadores de posición del comando anterior por los valores siguientes.
| Marcador de posición | Value |
|---|---|
| SOURCE | Nombre de la organización de origen |
| CURRENT-NAME | Nombre del repositorio que quieres migrar |
| DESTINATION | Nombre de la organización de destino |
| NEW-NAME | Nombre que quieres que tenga el repositorio migrado |
| TEAM-PROJECT | Name of the team project of the repository you want to migrate |
Si deseas cancelar una migración, usa el comando abort-migration, reemplazando MIGRATION-ID por el identificador devuelto de migrate-repo.
gh ado2gh abort-migration --migration-id MIGRATION-ID
gh ado2gh abort-migration --migration-id MIGRATION-ID
Step 6: Validate your migration and check the error log
Una vez que se complete la migración, se recomienda revisar el registro de migración. Para más información, consulta Acceso a los registros de migración para GitHub Enterprise Importer.
Se recomienda revisar los repositorios migrados para obtener una comprobación de solidez.