git clone

Aquí examinaremos el comando git clone en profundidad. git clone es una utilidad de línea de comandos de Git que se utiliza para fijar como objetivo un repositorio existente y clonarlo o copiar el repositorio objetivo. En esta página, analizaremos las amplias opciones de configuración y los casos de uso comunes de git clone. Algunos puntos que trataremos aquí son los siguientes:

  • Clonar un repositorio local o remoto
  • Clonar un repositorio bare
  • Utilizar opciones superficiales para clonar parcialmente repositorios
  • Sintaxis de la URL de Git y protocolos admitidos

En la guía Configuración de un repositorio, hemos explicado el caso de uso básico de git clone. Esta página se centrará en escenarios de clonación y configuración más complejos.

Objetivo: copia de desarrollo de la colaboración entre repositorios

Si un proyecto ya se ha configurado en un repositorio central, el comando git clone es la manera más común para que los usuarios obtengan una copia de desarrollo. Al igual que git init, la clonación suele ser una operación única. Una vez que un desarrollador ha obtenido una copia de trabajo, todas las operaciones de control de versiones y colaboraciones se administran por medio de su repositorio local.

Colaboración entre repositorios

Es importante comprender que la idea de "copia de trabajo" de Git es muy distinta a la copia de trabajo que se obtiene al extraer código de un repositorio SVN. A diferencia de SVN, Git no distingue entre la copia de trabajo y el repositorio central: todos son repositorios de Git completos.

Por tanto, colaborar con Git es intrínsecamente distinto a hacerlo con SVN. Mientras que SVN depende de la relación entre el repositorio central y la copia de trabajo, el modelo de colaboración de Git se basa en la interacción entre repositorios. En lugar de insertar una copia de trabajo en el repositorio central de SVN, se extraen o envían confirmaciones de un repositorio a otro.

Tutorial de Git: repositorio a colaboración de copia de trabajo Tutorial de Git: colaboración entre repositorios

Por supuesto, nada te impide dar un significado especial a ciertos repositorios de Git. Por ejemplo, con solo definir un repositorio de Git como el "central", es posible replicar un flujo de trabajo centralizado mediante Git. La cuestión es que esto se consigue por medio de convenciones, no porque esté integrado en el propio VCS.

Uso

git clone se utiliza principalmente para apuntar a un repositorio existente y clonar o copiar dicho repositorio en un nuevo directorio, en otra ubicación. El repositorio original se puede localizar en el sistema de archivos local o en los protocolos admitidos a los que se puede acceder por máquina remota. El comando git clone copia un repositorio de Git existente. Es una especie de SVN checkout, salvo porque la "copia de trabajo" es un repositorio de Git completo: tiene su propio historial, administra sus propios archivos y es un entorno completamente aislado del repositorio original.

Por comodidad, la clonación crea automáticamente un conexión remota llamada "origen" que apunta al repositorio original. Gracias a esto, es muy fácil interactuar con un repositorio central. Esta conexión automática se establece creando referencias de Git a los encabezados de la rama remota en refs/remotes/origin e inicializando las variables de configuración remote.origin.url y remote.origin.fetch.

Un ejemplo que demuestra cómo se usa git clone puede encontrarse en la guía Configuración de un repositorio. El ejemplo de abajo ilustra cómo obtener una copia local de un repositorio central almacenado en un servidor accesible desde example.com utilizando John como nombre de usuario de SSH:

git clone ssh://john@example.com/path/to/my-project.git
cd my-project
# Start working on the project

El primer comando inicializa un nuevo repositorio de Git en la carpeta my-project de tu máquina local y lo completa con el contenido del repositorio central. A continuación, puedes hacer cd en el proyecto y empezar a editar los archivos, confirmar instantáneas e interactuar con otros repositorios. Asimismo, ten en cuenta que la extensión .git se omite del repositorio clonado. Esto refleja que el estado de la copia local no es bare.

Clonación a una carpeta específica

git clone <repo> <directory>

Clona el repositorio ubicado en <repo> en la carpeta llamada ~<directory>! de la máquina local.

Clonación de una etiqueta específica

git clone --branch <tag> <repo>

Clona el repositorio ubicado en <repo> y clona solo la referencia de <tag>.

Clonación superficial

git clone -depth=1 <repo>

Clona el repositorio que se encuentra en <repo> y clona solo el 
historial de confirmaciones especificado por la opción depth=1. En este ejemplo, se realiza una clonación de <repo> y solo se incluye la confirmación más reciente en el nuevo repositorio clonado. La clonación superficial es muy útil cuando se trabaja con repositorios que tienen un largo historial de confirmaciones. Un largo historial de confirmaciones podría causar problemas de escalado como límites de uso del espacio de disco y largos tiempos de espera cuando se clona. Una clonación superficial puede aliviar estas incidencias de escalado.

Opciones de configuración

git clone -branch

El argumento -branch te permite especificar una rama específica para clonarla en vez de la rama a la que apunta el HEAD remoto, normalmente la rama maestra. Asimismo, puedes incluir una etiqueta en vez de una rama con el mismo efecto.

 

git clone -branch new_feature git://remoterepository.git

El ejemplo anterior clonaría solo la rama new_feature del repositorio de Git remoto. Se trata simplemente de una utilidad práctica que te ahorra el tiempo de descargar la referencia de HEAD del repositorio y después el tener que recuperar también la referencia que necesitas.

git clone -mirror frente a git clone -bare

git clone --bare

Al igual que git init --bare, cuando el argumento -bare se pasa a git clone, se realizará una copia del repositorio remoto con un directorio de trabajo omitido. Esto significa que se configurará un repositorio con el historial del proyecto que puede enviarse e incorporar cambios a él, pero no se puede editar directamente. Asimismo, no se configurará ninguna rama remota para el repositorio con el repositorio -bare. Al igual que git init --bare, se utiliza para crear un repositorio alojado que los desarrolladores no editarán directamente.

git clone --mirror

Al pasar el argumento --mirror, implícitamente se pasa el argumento --bare también. Esto significa que el comportamiento de --bare se hereda de --mirror, lo que da como resultado un repositorio bare sin archivos de trabajo editables. Además, --mirror clonará todas las referencias extendidas del repositorio remoto y mantendrá la configuración de seguimiento de la rama remota. A continuación, puedes actualizar git remote en el servidor reflejado y sobrescribirá todas las referencias del repositorio de origen. Eso te da la función de "reflejo" exacto.

Otras opciones de configuración

Para ver una lista exhaustiva de otras opciones de git clone, consulta la documentación oficial de Git. En este documento, mencionaremos brevemente otras opciones comunes.

git clone --template

git clone --template=<template_directory> <repo location>

Clona el repositorio de <repo location> y aplica la plantilla de <template directory> a la rama local que se ha creado nueva. Puede encontrarse una referencia completa sobre plantillas de Git en nuestra página de git init.
 

URL de Git

Git tiene su propia sintaxis para las URL, que se usa para pasar ubicaciones del repositorio remotas a comandos Git. Como git clone se utiliza más habitualmente en repositorios remotos, examinaremos la sintaxis de las URL de Git aquí.
 

Protocolos de URL de Git

-SSH

Secure Shell (SSH) es un extendido protocolo de red autenticada que se configura habitualmente de manera predeterminada en la mayoría de servidores. Como SSH es un protocolo autenticado, tendrás que establecer credenciales con el servidor de alojamiento antes de conectarte. ssh://[user@]host.xz[:port]/path/to/repo.git/
 

- GIT
 

Un protocolo único de Git. Git viene con un daemon que se ejecuta en el puerto (9418). El protocolo es similar a SSH. Sin embargo, NO tiene autenticación. git://host.xz[:port]/path/to/repo.git/
 

- HTTP
 

Protocolo de transferencia de hipertexto. El protocolo de la web, utilizado habitualmente para transferir datos HTML de páginas web por Internet. Git puede configurarse para comunicarse por HTTP http[s]://host.xz[:port]/path/to/repo.git/
 

Resumen

En este documento, hemos examinado en detalle git clone. Los puntos más importantes son los siguientes:

1. git clone se utiliza para crear una copia de un repositorio objetivo.

2. El repositorio objetivo puede ser local o remoto.

3. Git admite unos cuantos protocolos de red para conectarse a repositorios remotos.

4. Hay muchas opciones de configuración diferentes disponibles que cambian el contenido de la clonación.
 

Para obtener una referencia más detallada sobre la función de git clone, consulta la documentación oficial de Git. Asimismo, incluimos ejemplos prácticos de git clone en nuestra guía Configuración de un repositorio.

 

¿Listo para aprender a usar Git?

Prueba este tutorial interactivo.

Comienza ahora