Compartir a través de


Importación de un repositorio de Git en un proyecto

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Importante

Considere la posibilidad de usar los tokens de Microsoft Entra más seguros sobre tokens de acceso personal de mayor riesgo. Para obtener más información, consulte Reducir el uso de PAT. Revise las instrucciones de autenticación para elegir el mecanismo de autenticación adecuado para sus necesidades.

En este artículo se explica cómo importar un repositorio Git existente desde GitHub, Bitbucket, GitLab u otra ubicación en un repositorio nuevo o vacío existente en el proyecto de Azure DevOps.

Requisitos previos

Categoría Requisitos
Acceso al proyecto Miembro de un proyecto .
Permisos - Ver código en proyectos privados: al menos acceso básico.
- Clonar o contribuir al código en proyectos privados: ser miembro del grupo de seguridad Contribuidores o contar con los permisos correspondientes en el proyecto.
- Establecer permisos de rama o repositorio: Administrar los permisos relacionados con la rama o el repositorio.
- Cambiar la rama predeterminada: Editar directivas para los permisos del repositorio.
- Importar un repositorio: miembro del grupo de seguridad de Administradores de proyecto o repositorio Git a nivel de proyecto Crear repositorio con la opción Permitir. Para obtener más información, consulte Establecimiento de permisos de repositorios Git.
Servicios Repositorio habilitado.
Herramientas Opcional. Use los comandos az repos: Azure DevOps CLI.

Nota

En proyectos públicos, los usuarios con acceso a las partes interesadas tienen acceso completo a Azure Repos, incluida la visualización, la clonación y la contribución al código.

Categoría Requisitos
Acceso al proyecto Miembro de un proyecto .
Permisos - Ver código: al menos acceso básico.
- Clonar o contribuir al código: Miembro de la Colaboradores grupo de seguridad o los permisos correspondientes en el proyecto.
Servicios Repositorio habilitado.

Importación a un repositorio nuevo

Realice los pasos siguientes para importar en un nuevo repositorio:

Nota

Una vez completada la importación del repositorio, Azure DevOps establece la rama predeterminada para ese repositorio importado. Si el repositorio importado contiene una rama denominada main, se establece como la rama predeterminada; de lo contrario, la primera rama (en orden alfabético) del repositorio importado se establece como Default.

  1. En su navegador, inicie sesión en su organización y seleccione Repos>.

    Captura de pantalla que muestra la vista Archivos en Repos.

  2. En la lista desplegable del repositorio, seleccione Importar repositorio.

    Captura de pantalla que muestra la opción Importar repositorio.

  3. Escriba la dirección URL de clonación del repositorio de origen y un nombre para el nuevo repositorio de Git.

    Captura de pantalla que muestra el cuadro de diálogo Importar repositorio con una dirección URL de repositorio de ejemplo.

  4. Seleccione Importar un repositorio.

El repositorio se importa.

Importación en un repositorio vacío existente

En la página Archivos del repositorio Git vacío, seleccione Importar y escriba la dirección URL de clonación. Proporcione credenciales si el repositorio de origen requiere autenticación.

Captura de pantalla que muestra la opción Importar para un repositorio vacío.

Nota

La característica de importación deshabilita la vinculación automatizada de los elementos de trabajo mencionados en un comentario de confirmación, ya que es posible que los identificadores de esos elementos de trabajo del proyecto de destino no sean los mismos que los del proyecto de origen. La vinculación automática para los elementos de trabajo mencionados en una confirmación se puede volver a habilitar; para ello, vaya a Configuración, Control de versiones, seleccione el repositorio y elija Opciones. Para obtener más información sobre cómo vincular confirmaciones con elementos de trabajo, vea Vinculación de elementos de trabajo con confirmaciones.

Importación manual de un repositorio mediante la CLI de az repos

Se puede usar az repos import para importar un repositorio a su proyecto de Azure DevOps.

Para poder importar un repositorio Git, antes deberá crear el repositorio en Azure DevOps. Además, el repositorio que cree debe estar vacío. Para crear un repositorio, vea Creación de un repositorio Git en Azure Repos.

az repos import create --git-source-url
                       [--detect {false, true}]
                       [--git-service-endpoint-id]
                       [--org]
                       [--project]
                       [--repository]
                       [--requires-authorization]
                       [--subscription]
                       [--user-name]

Parámetros

Parámetro Descripción
git-source-url Necesario. Dirección URL del repositorio Git de origen que se va a importar.
detect Opcional. Detecta automáticamente la organización. Valores aceptados: false y true.
git-service-endpoint-id Opcional. Punto de conexión de servicio para conectar con el punto de conexión externo.
org, organization URL de la organización de Azure DevOps. Puede configurar la organización predeterminada mediante az devops configure -d organization=<ORG_URL>. Obligatorio si no está configurado como predeterminado o seleccionado mediante la configuración de Git. Ejemplo: https://dev.azure.com/MyOrganizationName/.
project, p Nombre o id. del proyecto. Puede configurar el proyecto predeterminado mediante az devops configure -d project=<NAME_OR_ID>. Obligatorio si no está configurado como predeterminado o seleccionado mediante la configuración de Git.
repository Nombre o identificador del repositorio en el que se va a crear la solicitud de importación.
requires-authorization Marca para indicar si el repositorio Git de origen es privado. Si necesita autenticación, genere un token de autenticación en el repositorio de origen y establezca la variable de entorno AZURE_DEVOPS_EXT_GIT_SOURCE_PASSWORD_OR_PAT en el valor del token. Para mejorar la seguridad, utilice tokens de ID de Microsoft Entra siempre que sea posible. A continuación, la solicitud de importación incluye la autenticación.
subscription Nombre o identificador de la suscripción Puede configurar la suscripción predeterminada mediante az account set -s <NAME_OR_ID>.
user-name Nombre de usuario que se va a especificar cuando el repositorio Git es privado.

Ejemplo

El siguiente comando importa el repositorio público fabrikam-open-source al repositorio Git vacío fabrikam-open-source para la configuración predeterminada az devops configure --defaults organization=https://dev.azure.com/fabrikamprime project="Fabrikam Fiber".

az repos import create --git-source-url https://github.com/fabrikamprime/fabrikam-open-source --repository fabrikam-open-source
{
  "detailedStatus": {
    "allSteps": [
      "Processing request",
      "Analyzing repository objects",
      "Storing objects",
      "Storing index file",
      "Updating references",
      "Import completed successfully"
    ],
    "currentStep": 6,
    "errorMessage": null
  },
  "importRequestId": 8,
  "parameters": {
    "deleteServiceEndpointAfterImportIsDone": null,
    "gitSource": {
      "overwrite": false,
      "url": "https://github.com/fabrikamprime/fabrikam-open-source"
    },
    "serviceEndpointId": null,
    "tfvcSource": null
  },
  "repository": {
    "defaultBranch": null,
    "id": "0f6919cd-a4db-4f34-a73f-2354114a66c4",
    "isDisabled": false,
    "isFork": null,
    "name": "new-empty-repo",
    "parentRepository": null,
    "project": {
      "abbreviation": null,
      "defaultTeamImageUrl": null,
      "description": "Guidance and source control to foster a vibrant ecosystem for Fabrikam Fiber applications and extensions.",
      "id": "56af920d-393b-4236-9a07-24439ccaa85c",
      "lastUpdateTime": "2021-05-24T21:52:14.95Z",
      "name": "Fabrikam Fiber",
      "revision": 438023732,
      "state": "wellFormed",
      "url": "https://dev.azure.com/fabrikamprime/_apis/projects/56af920d-393b-4236-9a07-24439ccaa85c",
      "visibility": "private"
    },
    "remoteUrl": "https://fabrikamprime@dev.azure.com/fabrikamprime/Fabrikam%20Fiber/_git/fabrikam-open-source",
    "size": 12477,
    "sshUrl": "git@ssh.dev.azure.com:v3/kelliott/Fabrikam%20Fiber/new-empty-repo",
    "url": "https://dev.azure.com/fabrikamprime/56af920d-393b-4236-9a07-24439ccaa85c/_apis/git/repositories/0f6919cd-a4db-4f34-a73f-2354114a66c4",
    "validRemoteUrls": null,
    "webUrl": "https://dev.azure.com/fabrikamprime/Fabrikam%20Fiber/_git/fabrikam-open-source"
  },
  "status": "completed",
  "url": "https://dev.azure.com/fabrikamprime/Fabrikam%20Fiber/_apis/git/repositories/0f6919cd-a4db-4f34-a73f-2354114a66c4/importRequests/8"
}

Importación manual de un repositorio mediante la CLI de Git

  1. Clone el repositorio de origen en una carpeta temporal del equipo usando la opción bare, como se muestra en el siguiente ejemplo de línea de comandos, y luego acceda a la carpeta del repositorio. Cuando se clona con la opción bare, el nombre de la carpeta incluye el sufijo .git. En este ejemplo, https://github.com/contoso/old-contoso-repo.git es el repositorio de origen que se va a importar manualmente.

    git clone --bare https://github.com/contoso/old-contoso-repo.git
    cd old-contoso-repo.git
    
  2. Cree un repositorio de destino y anote la dirección URL de clonación. En este ejemplo, https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo es la dirección URL del nuevo repositorio de destino.

  3. Ejecute el siguiente comando para copiar el repositorio de origen en el repositorio de destino.

    git push --mirror https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
    

    Advertencia

    El uso de --mirror sobrescribe todas las ramas del repositorio de destino, lo que incluye eliminar las ramas que no están en el repositorio de origen.

  4. Si el repositorio de origen tiene objetos LFS, recójalos y cópielos del repositorio de origen al repositorio de destino.

    git lfs fetch origin --all
    git lfs push --all https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repo
    
  5. Para eliminar la carpeta temporal, ejecute los siguientes comandos.

    cd ..
    rm -rf old-contoso-repo.git
    

Preguntas más frecuentes (FAQ)

Aunque las importaciones se realizan con más frecuencia, las siguientes condiciones pueden causar problemas.

P: ¿Qué ocurre si mi repositorio de origen está detrás de la autenticación en dos fases?

R: El servicio de importación usa las API REST para validar y desencadenar la importación y no puede trabajar directamente con repositorios que requieren autenticación en dos fases.

La mayoría de los proveedores de hospedaje de Git admiten tokens de autenticación que se pueden proporcionar al servicio de importación:

Tokens de id. de Microsoft Entra (recomendado): Los tokens de id. de Microsoft Entra proporcionan una mayor seguridad y son el método de autenticación recomendado. Puede obtener estos tokens a través de:

  • CLI de Azure (para desarrollo y pruebas):

    az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query "accessToken" --output tsv
    
  • Principal de servicio (para escenarios de producción o automatizados):

    • Registro de una aplicación en Microsoft Entra ID
    • Creación de un secreto de cliente para la aplicación
    • Concesión de permisos adecuados a la aplicación en Azure DevOps
    • Uso de las credenciales de la entidad de servicio para obtener tokens de forma programática

Tokens de acceso personal (alternativa):GitHub y Azure DevOps también admiten tokens de acceso personal.

P: ¿Qué ocurre si mi repositorio de origen no admite multi_ack?

R: El servicio de importación usa la funcionalidad multi_ack del protocolo Git durante la importación. Si el repositorio de origen no proporciona esta funcionalidad, el servicio de importación puede no importar desde el origen especificado. Este error puede producirse al crear una solicitud de importación o mientras la importación está en curso.

P: ¿Puedo importar desde versiones anteriores?

R: Si el repositorio git de origen está en una versión local anterior a 2017 RTM, se produce un error en la importación debido a un error de coincidencia de contrato entre las versiones anteriores y Azure DevOps más recientes.

P: ¿Puedo usar credenciales basadas en MSA?

R: Desafortunadamente, las credenciales basadas en MSA (cuenta microsoft) no funcionan. El servicio de importación emplea una autenticación básica para comunicarse con el repositorio de origen. Si el nombre de usuario y la contraseña que usa no son autenticación básica, se producirá un error en la autenticación e importación. Una manera de comprobar si el nombre de usuario o la contraseña que usa son autenticación básica es intentar usar Git para clonar el repositorio con el formato siguiente:

git clone https://<<username>>:<<password>>@<<remaining clone Url>>

P: ¿Puedo importar desde TFVC?

R: Puede migrar código de un repositorio TFVC existente a un nuevo repositorio de Git dentro de la misma cuenta. Aunque la migración a Git tiene muchas ventajas, es un proceso implicado para los grandes repositorios y equipos de TFVC. Los sistemas de control de versiones centralizados, como TFVC, se comportan de forma diferente a Git de maneras fundamentales. El cambio acarrea mucho más que aprender nuevos comandos. Es un cambio disruptivo que requiere una planificación cuidadosa. Para obtener más información, vea Importación de TFVC a Git.

P: ¿Qué ocurre si mi repositorio de origen contiene objetos LFS de Git?

R: La importación de Git no importa objetos LFS de Git.

Para mover objetos LFS, puede hacer lo siguiente:

  • Importe el repositorio mediante la característica de importación del repositorio en Azure DevOps. Esta acción copia todos los objetos de Git desde el origen a Azure DevOps, que también importa los punteros LFS que son objetos git, pero no los archivos LFS.

Para desplazarse por los archivos LFS, necesita Git.exe y el cliente LFS en la misma máquina, con acceso tanto al repositorio de origen como al repositorio de destino.

  • Clone el repositorio importado de Azure DevOps en el sistema local. La clonación funciona, pero se produce un error al realizar el chequeo de archivos LFS.
  • Agregue el repositorio de origen como remoto, por ejemplo, "source".
  • Ejecute git lfs fetch source --all, que lleva todos los archivos LFS del origen al repositorio local.
  • Suponiendo que el repositorio de Azure DevOps de destino sea el remoto "destino".
  • Ejecute git lfs push target --all.

P: ¿Puedo importar actualizaciones si el origen cambia más adelante?

R: El servicio de importación es para importar inicialmente un repositorio completo. Para reflejar cambios posteriores, necesita un clon local del repositorio con los remotos configurados tanto para origen como para destino.

Los cambios se pueden sincronizar mediante los siguientes comandos. En el ejemplo siguiente se trata la importación de Azure Repos como origin y el repositorio original como upstream.

git clone --bare <Azure-Repos-clone-URL>.git
cd <name-of-repo>
git remote add --mirror=fetch upstream <original-repo-URL>
git fetch upstream --tags
git push origin --all

Pasos siguientes