Clonar un repositorio de Git con una revisión específica
Este artículo analiza los diversos métodos que podemos emplear para clonar un repositorio de Git con una revisión específica o un conjunto de cambios. Es conveniente cuando tiene un repositorio con archivos grandes y solo necesita una versión de código específica.
En lugar de clonar todo el repositorio, puede obtener un conjunto de cambios específico que puede ayudar a reducir el tiempo de clonación, especialmente si se trata de archivos grandes.
Clonar un repositorio de Git con una revisión específica
Podemos usar varios métodos para clonar un repositorio con un conjunto de cambios específico. Comencemos con el desarrollo reciente en Git que nos permite usar el comando git fetch
con un compromiso de interés.
Antes de la versión 2.5.0 de Git, git fetch origin <commit id>
no funcionaba. Con el lanzamiento de la versión 2.5.0, Git se incluyó con la opción de configurar uploadpack.allowReachableSHA1InWant
en true
en el lado del servidor.
Una vez establecido en true
, podemos obtener cualquier confirmación accesible. Esta función está desactivada de forma predeterminada y no se recomienda por motivos de seguridad y rendimiento.
Algunos servidores Git como Bitbucket suelen tener esta función activada de forma predeterminada. Siga estos pasos para obtener pequeños subconjuntos de un gran repositorio de Git en conjuntos de cambios específicos.
Inicializamos un repositorio de Git en el directorio que deseamos clonar.
$ git init
Luego agregaremos nuestro control remoto al repositorio local.
$ git remote add origin <url://to/source/repository
Ahora podemos obtener el compromiso que queremos, como se ilustra a continuación.
$ git fetch origin <sha1-of-commit-of-interest>
Finalice el proceso restableciendo la rama al compromiso de interés.
$ git reset --hard FETCH_HEAD
Tenga en cuenta que esto obtendrá el historial completo de confirmación, incluida la confirmación especificada. Puede limitar esto con las banderas --depth=...' o '--shallow-since=...
.
Este método no es seguro y es posible que no funcione para todos los servidores Git. ¿Existen alternativas a este método que lleguen al mismo destino?
El método que estamos a punto de discutir es ideal para repositorios pequeños. Todavía funcionará con repositorios grandes, pero requerirá paciencia de su parte.
Suponiendo que ya sabe de qué confirmación desea clonar, comience por clonar todo el repositorio.
Comience agregando el control remoto a su repositorio local y proceda a clonar, como se muestra a continuación.
$ git clone <repo url>
Una vez hecho esto, mueva HEAD
a la confirmación de interés usando el comando git reset
, como se ilustra a continuación.
$ git reset --hard <commit id>
Si desea volver a la confirmación más reciente, ejecute el comando git pull
.
Alternativamente, puede clonar el repositorio y cambiar a la confirmación de interés usando el comando git checkout
, como se muestra a continuación.
$ git clone <repo url>
Para cambiar a la confirmación:
$ git checkout <commit id>
Ejecute el comando git reset
mientras está en el modo HEAD
desconectado, como se muestra a continuación.
$ git reset --hard
Este enfoque es ideal si desea jugar con el código sin cambiar el contenido de la rama.
Ejecute el comando git switch -
para salir del modo HEAD
separado.
En conclusión, algunos servidores de Git, como Bitbucket, nos permiten buscar desde un compromiso accesible. Necesitará la versión 2.5+ de Git para aprovechar la función uploadpack.allowReachableSHA1InWant
, que le permitirá ejecutar el comando git fetch origin <commit-of-interest>
.
Hemos cubierto otras alternativas que llegarán al mismo destino.
John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.
LinkedIn