Importación de un repositorio de Git
Azure Repos | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018-TFS 2013
En esta guía se muestra cómo importar un repositorio de Git existente desde GitHub, Bitbucket, GitLab u otra ubicación en un repositorio nuevo o vacío existente en el proyecto en Azure DevOps.
Importante
La característica Importar repositorio no funciona actualmente si va a importar un repositorio de GitHub mediante TFS 2017.1 a TFS 2018.1. Para obtener más información sobre este problema, vea Aviso de eliminación de estándares criptográficos débiles y No se puede conectar a GitHub debido a un cambio solo de TLS 1.2.
Hay varias soluciones alternativas a este problema:
Puede importar un repositorio GitHub en TFS mediante los pasos descritos en Importación manual de un repositorio.
Puede establecer una clave del Registro de .NET en todo el equipo en los servidores de nivel de aplicación para que puedan usar todas las versiones de protocolo TLS disponibles. Después de establecer estas claves del Registro, deberá reciclar los grupos de aplicaciones de TFS (o reiniciar los servidores) para que se active la configuración. Abra un símbolo del sistema con privilegios elevados y ejecute los siguientes comandos para establecer las claves del Registro.
reg add HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:64 reg add HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:32En los servidores de nivel de aplicación, puede modificar el archivo web.config para cambiar targetFramework de
<httpRuntime targetFramework="4.5"a<httpRuntime targetFramework="4.6".
Este problema se resuelve a partir de Team Foundation Server 2018 Update 2 RC1 y posteriores.
Prerrequisitos
- Una organización de Azure DevOps. Si no tiene una, puede registrarse para obtenerla de forma gratuita. Cada organización incluye repositorios de Git privados gratuitos e ilimitados.
- Para usar la característica Importar repositorio en TFS, debe tener TFS 2017 Update 1 o posterior.
- Para importar un repositorio mediante TFS 2017 RTM o versiones anteriores, consulte Importación manual de un repositorio.
Importación en un repositorio nuevo
Seleccione Repos, Archivos.

En la lista desplegable del repositorio, seleccione Importar repositorio.

Si el repositorio de origen está disponible públicamente, solo tiene que escribir la dirección URL de clonación del repositorio de origen y un nombre para el nuevo repositorio de Git.
Si el repositorio de origen es privado pero se puede acceder a él mediante la autenticación básica (nombre de usuario-contraseña, token de acceso personal, etc.), seleccione Requiere autorización y escriba sus credenciales. No se admite la autenticación SSH, pero puede importar manualmente un repositorio que use la autenticación SSH siguiendo los pasos descritos en Importación manual de un repositorio.

En la lista desplegable del repositorio, seleccione Importar repositorio.

Si el repositorio de origen está disponible públicamente, solo tiene que escribir la dirección URL de clonación del repositorio de origen y un nombre para el nuevo repositorio de Git.
Si el repositorio de origen es privado pero se puede acceder a él mediante la autenticación básica (nombre de usuario-contraseña, token de acceso personal, etc.), seleccione Requiere autorización y escriba sus credenciales. No se admite la autenticación SSH, pero puede importar manualmente un repositorio que use la autenticación SSH siguiendo los pasos descritos en Importación manual de un repositorio.

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

Nota:
La característica de importación deshabilita la vinculación automatizada para los elementos de trabajo mencionados en un comentario de confirmación, ya que es posible que los IDs de elemento 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, Controlde versiones, seleccione el repositorio y elija Opciones. Para obtener más información sobre cómo vincular confirmaciones con elementos de trabajo, vea Vincular elementos de trabajo a confirmaciones.
Importación manual de un repositorio
La característica del repositorio de importación se introdujo en TFS 2017 Update 1. Si usa TFS 2017 RTM o versiones anteriores, puede usar los pasos siguientes para importar manualmente un repositorio en TFS. También puede seguir estos pasos para importar manualmente un repositorio en un repositorio de Azure DevOps Services reemplazando TFS por Azure Repos en los pasos siguientes.
Clone el repositorio de origen en una carpeta temporal en el equipo con la opción , como se muestra en el ejemplo de línea de comandos siguiente y, a continuación, vaya a la
barecarpeta del repositorio. Al clonar mediante labareopción , el nombre de la carpeta incluye el sufijo.git. En este ejemplo,https://github.com/contoso/old-contoso-repo.gites 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.gitCree un repositorio de destino con TFS 2017 RTM y anote la dirección URL de clonación. En este ejemplo,
https://dev.azure.com/contoso-ltd/MyFirstProject/_git/new-contoso-repoes la dirección URL del nuevo repositorio de destino.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-repoAdvertencia
El uso de sobrescribirá todas las ramas del repositorio de destino, lo que incluye la eliminación de las ramas que no
--mirrorestán en el repositorio de origen.Si el repositorio de origen tiene objetos LFS, capturarlos y copiarlos desde el 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-repoEjecute los siguientes comandos para eliminar la carpeta temporal.
cd .. rm -rf old-contoso-repo.git
Preguntas más frecuentes
Aunque la mayoría de las veces la importación se realiza correctamente, las siguientes condiciones pueden causar problemas.
- ¿Qué ocurre si mi repositorio de origen está detrás de la autenticación en dos fases?
- ¿Qué ocurre si mi repositorio de origen no admite multi_ack?
- ¿Puedo importar desde versiones anteriores de Team Foundation Server?
- ¿Puedo usar credenciales basadas en MSA?
- ¿Puedo importar desde TFVC?
- ¿Qué ocurre si mi repositorio de origen contiene objetos LFS de Git?
¿Qué ocurre si mi repositorio de origen está detrás de la autenticación en dos fases?
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 GitHub y Azure DevOps Services admiten tokens personales que se pueden proporcionar al servicio de importación.
¿Qué ocurre si mi repositorio de origen no admite multi_ack?
El servicio de importación usa la 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 dado. Este error puede producirse al crear una solicitud de importación o mientras la importación está en curso.
¿Puedo importar desde versiones anteriores de Team Foundation Server?
Si el repositorio de Git de origen está en una versión de TFS anterior a TFS 2017 RTM, se producirá un error en la importación. Esto sucede debido a una discrepancia de contrato entre las versiones Azure DevOps Services/TFS y anteriores a 2017 RTM de TFS.
¿Puedo usar credenciales basadas en MSA?
Desafortunadamente, las credenciales basadas en MSA (cuenta Microsoft, anteriormente Live ID) no funcionarán. El servicio de importación se basa en la autenticación básica para comunicarse con el repositorio de origen. Si el nombre de usuario o la contraseña que usa no son autenticación básica, se producirá un error en la autenticación y se producirá un error en la importación. Una manera de comprobar si el nombre de usuario o la contraseña que usa son autenticación básica o no es intentar usar Git para clonar el repositorio con el formato siguiente.
git clone https://<<username>>:<<password>>@<<remaining clone Url>>
¿Puedo importar desde TFVC?
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 equipos y repositorios de TFVC de gran tamaño. Los sistemas de control de versiones centralizados, como TFVC, se comportan de maneras fundamentales diferentes a Git. El modificador implica mucho más que aprender nuevos comandos. Se trata de un cambio perjudicial que requiere una planeación cuidadosa. Para más información, consulte Importación de TFVC a Git.
¿Qué ocurre si mi repositorio de origen contiene objetos LFS de Git?
La importación de Git no importará objetos LFS de Git.
Los objetos LFS se pueden mover mediante los pasos siguientes:
- Importe el repositorio mediante la característica de importación del repositorio en Azure DevOps. Esto copiará todos los objetos de Git de origen a Azure DevOps (esto también importará los punteros LFS que son objetos de Git, pero no los archivos LFS).
Para desplazarse por los archivos LFS (necesitará tanto el cliente Git.exe como el cliente LFS en el mismo cuadro y el acceso al repositorio de origen y al repositorio de destino)
- Clone el repositorio importado de Azure DevOps al sistema local, la clonación funcionará, pero se producirá un error al realizar la desprotección de archivos LFS.
- Agregue el repositorio de origen como remoto (por ejemplo, "origen").
- Realizar
git lfs fetch source --all(esto llevará todos los archivos LFS del origen al repositorio local). - Suponiendo que el repositorio de VSTS de destino es el "destino" remoto
- Realizar
git lfs push target --all
¿Puedo importar actualizaciones si el origen cambia más adelante?
El servicio de importación es para importar inicialmente un repositorio completo. Para reflejar los cambios posteriores, necesitará un clon local del repositorio con los remotos establecidos en origen y destino.
Puede sincronizar los cambios mediante los siguientes comandos.
Trataremos la importación Azure Repos como origin y el repositorio original como upstream .
git clone --bare <Azure-Repos-clone-URL>
cd <name-of-repo>
git remote add --mirror=fetch upstream <original-repo-URL>
git fetch upstream --tags
git push origin --all