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.
Material relacionado
rama de git
VER LA SOLUCIÓN
Aprende a usar Git con Bitbucket Cloud
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>
Clona el repositorio ubicado en <repo>
en la carpeta llamada ~<directory>!
en la máquina local.
Clonación de una etiqueta específica
git clone --branch <tag> <repo>
Clona el repositorio ubicado en <repo>
y clona solamente la referencia para <tag>
.
Clonación superficial
git clone -depth=1 <repo>
Clona el repositorio ubicado en < repo >
y clona solamente 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 en la clonación. Una clonación superficial puede mitigar estas incidencias de escalado.
Opciones de configuración
git clone -branch
El argumento -branch
permite especificar una rama concreta para clonarla en vez de la rama a la que apunta el HEAD
remoto, normalmente la rama principal. Asimismo, puedes incluir una etiqueta en vez de una rama con el mismo efecto.
git clone --branch
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>
Clona el repositorio en <repo location>
y aplica la plantilla de <template directory>
a la rama local creada recientemente. Puedes consultar una referencia completa sobre las 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 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.
Compartir este artículo
Tema siguiente
Lecturas recomendadas
Consulta estos recursos para conocer los tipos de equipos de DevOps o para estar al tanto de las novedades sobre DevOps en Atlassian.