Skip to main content
Skip to content

Esta versión de GitHub Enterprise Server se discontinuará el 2026-10-14. No se admiten versiones discontinuas. No se realizarán lanzamientos de patch, ni siquiera para problemas de seguridad críticos. Para mejorar el rendimiento, mejorar la seguridad y las nuevas características de GitHub Enterprise Server, consulte Información general del proceso de actualización. Para obtener ayuda con la actualización, GitHub Soporte técnico empresarial.

Migración de repositorios entre dos empresas con residencia de datos

Puede utilizar la extensión GitHub Enterprise Importer (GEI) de GitHub CLI para migrar repositorios entre dos instancias de Nube de GitHub Enterprise con residencia de datos.

Información sobre las migraciones entre empresas con residencia de datos

Las migraciones entre dos empresas con residencia de datos usan el flujo estándar de migración de archivos de GEI:

  1. GEI se conecta al GHE.com subdominio de origen.
  2. GEI genera un archivo que contiene los datos del repositorio.
  3. GEI carga el archivo en el almacenamiento de migración compatible.
  4. GEI inicia la migración del repositorio en el subdominio de destino GHE.com .
  5. El destino Importer descarga y procesa el archivo.

En esta migración:

  • El origen es un GHE.com subdominio, como https://SOURCE_SUBDOMAIN.ghe.com.
  • El destino es un subdominio diferente GHE.com , como https://DESTINATION_SUBDOMAIN.ghe.com.
  • Las organizaciones de origen y destino pueden tener nombres diferentes.
  • El repositorio migrado puede tener un nombre diferente en la organización de destino.

Los puntos de conexión de API de origen y destino deben especificarse de forma independiente. No use la dirección URL de la API de destino para las operaciones de origen.

Importante

Nube de GitHub Enterprise con residencia de datos Las direcciones URL de API usan el formato https://api.SUBDOMAIN.ghe.com. Esto es diferente de una GitHub Enterprise Server dirección URL de API, que normalmente usa el formato https://HOSTNAME/api/v3.

Prerequisites

Antes de empezar:

  • Confirme que el origen y el destino son subdominios diferentes GHE.com .
  • Tanto en la organización de origen como en la de destino, asegúrese de ser propietario de la organización o de que se le haya concedido el rol de migrador.
  • Cree un personal access token (classic) para la organización de origen.
  • Cree un personal access token (classic) para la organización de destino. Para conocer los ámbitos necesarios, consulte Administración del acceso para una migración entre productos de GitHub.
  • Ejecute una migración de prueba antes de realizar la migración de producción.

Se recomienda detener temporalmente el trabajo en el repositorio de origen durante la migración de producción. GitHub Enterprise Importer no realiza migraciones diferenciales, por lo que los cambios realizados después de iniciar la migración no se incluyen automáticamente.

Para obtener información sobre los datos migrados y las limitaciones conocidas, consulte Acerca de las migraciones entre productos de GitHub con GitHub Enterprise Importer.

Instale GitHub CLI y GEI

Instale el GitHub CLI y, a continuación, instale la extensión GEI:

Bash
gh extension install github/gh-gei

Actualice la extensión antes de iniciar una migración:

Bash
gh extension upgrade github/gh-gei

Para mostrar las opciones disponibles:

Bash
gh gei migrate-repo --help

Establecimiento de variables de entorno

Establezca los personal access tokenvalores para ambas empresas:

Bash
export GH_SOURCE_PAT="SOURCE_PERSONAL_ACCESS_TOKEN"
export GH_PAT="DESTINATION_PERSONAL_ACCESS_TOKEN"

Establezca la dirección URL de API para cada GHE.com subdominio:

Bash
export SOURCE_API_URL="https://api.SOURCE_SUBDOMAIN.ghe.com"
export TARGET_API_URL="https://api.DESTINATION_SUBDOMAIN.ghe.com"

Reemplace SOURCE_SUBDOMAIN y DESTINATION_SUBDOMAIN por los subdominios de la empresa de origen y destino.

Por ejemplo:

Bash
export SOURCE_API_URL="https://api.source-example.ghe.com"
export TARGET_API_URL="https://api.destination-example.ghe.com"

El GH_SOURCE_PAT token se usa para las operaciones del lado de origen, incluida la generación de archivos. El GH_PAT token se usa para las operaciones del lado de destino.

Configurar el almacenamiento de blobs de archivo

GitHub Enterprise Importer exporta cada proyecto a un archivo y, a continuación, carga el archivo en Blob Storage desde el que GitHub se puede leer. Elija el back-end de almacenamiento al ejecutar una migración:

Opción de almacenamientoCómo seleccionarloNotas

GitHub-owned blob storage (recomendado) | --use-github-storage | No se requiere ninguna configuración. GitHub elimina el archivo automáticamente después de una migración correcta o siete días después de una migración con error. AWS S3 | --aws-bucket-name (con las variables de entorno AWS_REGION, AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY, y, opcionalmente, AWS_SESSION_TOKEN) | Usted es responsable del bucket y de su ciclo de vida. GitHub no elimina los archivos del almacenamiento. Azure Blob Storage (Servicio de almacenamiento de blobs de Azure) | AZURE_STORAGE_CONNECTION_STRING variable de entorno (para un solo migrate-repo comando, puede usar --azure-storage-connection-string) | Solo se admiten cadenas de conexión de clave de acceso de la cuenta de almacenamiento (no SAS). GitHub no elimina los archivos del almacenamiento.

Migración de un único repositorio

Para migrar un único repositorio, use el gh gei migrate-repo comando :

Bash
gh gei migrate-repo \
  --github-source-org SOURCE_ORGANIZATION \
  --source-repo SOURCE_REPOSITORY \
  --github-source-api-url "$SOURCE_API_URL" \
  --github-target-org DESTINATION_ORGANIZATION \
  --target-repo DESTINATION_REPOSITORY \
  --target-api-url "$TARGET_API_URL" \
  --verbose

Reemplace los marcadores de posición por los siguientes valores:

Marcador de posiciónDescription
SOURCE_ORGANIZATIONOrganización propietaria del repositorio en la empresa de origen.
SOURCE_REPOSITORYNombre del repositorio en la organización de origen.
DESTINATION_ORGANIZATIONLa organización que poseerá el repositorio migrado en la empresa de destino.
DESTINATION_REPOSITORYNombre del nuevo repositorio de la organización de destino.

Por ejemplo:

Bash
gh gei migrate-repo \
  --github-source-org source-org \
  --source-repo example-repository \
  --github-source-api-url "$SOURCE_API_URL" \
  --github-target-org destination-org \
  --target-repo example-repository \
  --target-api-url "$TARGET_API_URL" \
  --verbose

Si omite --target-repo, GEI usa el nombre del repositorio de origen.

Argumentos opcionales

Puede agregar las siguientes opciones al comando de migración:

ArgumentDescription
--target-repo-visibility TARGET-VISIBILITYEstablece la visibilidad del nuevo repositorio. Los valores admitidos son private y internal.
--skip-releasesMigra el repositorio sin lanzamientos.
--queue-onlyPone en cola la migración sin esperar a que se complete.
--verboseMuestra información adicional sobre la migración.

Por ejemplo:

Bash
gh gei migrate-repo \
  --github-source-org source-org \
  --source-repo example-repository \
  --github-source-api-url "$SOURCE_API_URL" \
  --github-target-org destination-org \
  --target-repo example-repository \
  --target-api-url "$TARGET_API_URL" \
  --target-repo-visibility internal \
  --verbose

Migración de varios repositorios

Para varios repositorios, utilice gh gei generate-script.

Bash
gh gei generate-script \
  --github-source-org SOURCE_ORGANIZATION \
  --github-target-org DESTINATION_ORGANIZATION \
  --github-source-api-url "$SOURCE_API_URL" \
  --target-api-url "$TARGET_API_URL" \
  --output migration-script.ps1

Revise el script generado antes de ejecutarlo. Ustedes pueden:

  • Quite los repositorios que no se deben migrar.
  • Cambiar los nombres del repositorio de destino.
  • Cambiar la visibilidad del repositorio de destino.
  • Agregue opciones como --skip-releases.
  • Agregue --download-migration-logs para descargar registros para cada migración.

Ejecute el script generado con PowerShell:

Bash
pwsh ./migration-script.ps1

Comprobación del estado de una migración

Si inició la migración con --queue-only, use el identificador de migración impreso por GEI para supervisarla:

Bash
gh gei wait-for-migration \
  --migration-id MIGRATION_ID \
  --target-api-url "$TARGET_API_URL" \
  --verbose

Reemplace por MIGRATION_ID el identificador devuelto por gh gei migrate-repo.

Nota:

Incluya ambos argumentos de URL de la API al realizar la comprobación. La dirección URL de la API de origen es necesaria para los comandos de GEI que recuperan información y registros de migración del origen.

Descarga de registros de migración

Para descargar los registros de migración:

Bash
gh gei download-logs \
  --migration-id MIGRATION_ID \
  --github-source-api-url "$SOURCE_API_URL" \
  --target-api-url "$TARGET_API_URL"

Revise los registros de advertencias y errores incluso cuando la migración notifica que se ha realizado correctamente.

Anulación de una migración

Para anular una migración en cola o en ejecución:

Bash
gh gei abort-migration \
  --migration-id MIGRATION_ID \
  --github-source-api-url "$SOURCE_API_URL" \
  --target-api-url "$TARGET_API_URL"

Solución de problemas

No se puede acceder al inquilino de origen

Compruebe que:

  • --github-source-api-url se establece en el subdominio de origen.
  • La dirección URL usa el formato https://api.SUBDOMAIN.ghe.com.
  • El token de origen se almacena en GH_SOURCE_PAT.
  • El token tiene acceso a la organización y al repositorio de origen.

No se puede acceder al inquilino de destino

Compruebe que:

  • --target-api-url se establece en el subdominio de destino.
  • La dirección URL usa el formato https://api.SUBDOMAIN.ghe.com.
  • El token de destino se almacena en GH_PAT.
  • Tiene permiso para crear repositorios en la organización de destino.

Se produce un error en la migración al generar o cargar el archivo.

Revise la salida y los registros de la migración y compruebe lo siguiente:

  • El almacenamiento de archivo de migración está configurado correctamente.
  • El proveedor de almacenamiento es accesible para el servicio de migración.
  • El repositorio de origen no se está modificando durante la migración.
  • No se han intercambiado las direcciones URL de API de origen y destino.

No se pueden descargar registros

Al usar download-logs, wait-for-migrationo abort-migration, proporcione las mismas direcciones URL de API de origen y destino que se usan para iniciar la migración:

--github-source-api-url "$SOURCE_API_URL" \
--target-api-url "$TARGET_API_URL"

Se rechaza la dirección URL de origen.

Asegúrese de que está utilizando el endpoint de API del subdominio GHE.com en lugar de un endpoint GitHub Enterprise Server.

Uso:

https://api.SUBDOMAIN.ghe.com

No utilice:

https://HOSTNAME/api/v3

El /api/v3 formato está pensado para GitHub Enterprise Server orígenes y no es el formato correcto para Nube de GitHub Enterprise con residencia de datos.