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 con el fin de clonarlo o copiarlo. 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 (vacío)
  • Utilizar opciones superficiales para clonar repositorios parcialmente
  • Sintaxis de las URL de Git y protocolos admitidos

En la guía Configuración de un repositorio, hemos explicado un caso de uso básico de git clone. En esta exploraremos situaciones de clonación y configuración más complejas.

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 de 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 se gestionan 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 Git completos.

Por tanto, colaborar con Git es intrínsecamente distinto que 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, las confirmaciones se envían o se incorporan cambios 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 Git. Por ejemplo, con solo definir un repositorio de Git como el "central", se puede replicar un flujo de trabajo centralizado usando Git. La idea 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 por el hecho de que 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 una conexión remota llamada "origin" 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.

Puedes encontrar un ejemplo en el que se ilustra cómo usar git clone en la guía Configuración de un repositorio. El siguiente ejemplo 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 rellena 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>

Clone the repository located at <repo> into the folder called ~<directory>! on the local machine.

Clonación de una etiqueta específica

git clone --branch <tag> <repo>

Clone the repository located at <repo> and only clone the ref for <tag>.

Clonación superficial

git clone -depth=1 <repo>

Clone the repository located at <repo> and only clone the
history of commits specified by the option depth=1. In this example a clone of <repo> is made and only the most recent commit is included in the new cloned Repo. Shallow cloning is most useful when working with repos that have an extensive commit history. An extensive commit history may cause scaling problems such as disk space usage limits and long wait times when cloning. A Shallow clone can help alleviate these scaling issues.

Opciones de configuración

git clone -branch

El argumento -branch te permite especificar una rama concreta 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 sucede con git init --bare, cuando se usa el argumento -bare en git clone, se efectuará 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 y del que se pueden incorporar cambios, pero que 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 usar el argumento --mirror, también se usa implícitamente el argumento --bare. 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. Acto seguido, puedes actualizar git remote en el servidor reflejado, y esta acción sobrescribirá todas las referencias del repositorio de origen, lo cual te brindará la función de "reflejo" exacta.

Otras opciones de configuración

Para ver una lista exhaustiva del resto de las 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>

Clones the repo at <repo location> and applies the template from <template directory> to the newly created local branch. A thorough refrence on Git templates can be found on our git init page.

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 los 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 incluye 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 se puede configurar 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 disponibles que cambian el contenido del clon

Si quieres leer una referencia más detallada sobre la funcionalidad 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.

¿Quieres aprender a usar Git?

Prueba este tutorial interactivo.

Comienza ahora