Introducción
git clone copia un repositorio remoto a tu máquina. Crea un nuevo directorio, inicializa .git dentro de él, descarga todos los objetos y refs, configura un remoto llamado origin y hace checkout del branch predeterminado. Después de clonar tienes un repositorio completo e independiente.
Clone básico
git clone https://github.com/torvalds/linux.git
cd linux
git remote -v
# origin https://github.com/torvalds/linux.git (fetch)
# origin https://github.com/torvalds/linux.git (push)
Eligiendo un nombre de directorio
Por defecto Git usa el último componente de la ruta. Sobrescríbelo:
git clone https://github.com/example/widget.git my-widget
Eligiendo un protocolo
- HTTPS: el más fácil, funciona a través de firewalls, a menudo necesita un asistente de credenciales o token.
- SSH: conveniente con autenticación por clave, rápido para usuarios avanzados.
- git://: anónimo, no autenticado, mayormente histórico.
- file:// o ruta local: clonar desde otro directorio.
git clone [email protected]:example/widget.git
git clone /srv/git/widget.git
git clone file:///srv/git/widget.git
Opciones útiles
git clone --depth 1 <url> # shallow: solo la punta
git clone --branch v1.2.3 <url> # checkout de un branch o tag específico
git clone --single-branch <url> # descargar solo un branch
git clone --bare <url> # clon bare, sin árbol de trabajo
git clone --recurse-submodules <url>
Los clones shallow ahorran ancho de banda en CI; conviértelos después con git fetch --unshallow.
Qué hace clone, paso a paso
- Crea el directorio destino.
- Ejecuta
git initdentro de él. - Añade
origincomo remoto. - Ejecuta
git fetch origin. - Configura el seguimiento del branch predeterminado.
- Ejecuta
git checkoutpara ese branch.
Clones sparse y partial para repos enormes
Los repositorios que abarcan gigabytes (sistemas operativos, monorepos) son dolorosos de clonar completamente. Dos características complementarias ayudan:
git clone --filter=blob:none --no-checkout <url> repo
cd repo
git sparse-checkout init --cone
git sparse-checkout set src/myteam
git checkout main
--filter=blob:none aplaza descargas de blobs hasta que se necesiten, mientras que sparse-checkout popula solo los directorios que listas. Juntos te permiten trabajar en una pequeña porción de un repo masivo con costo proporcional de disco y ancho de banda.
Hooks en tiempo de clone
Algunos proyectos incluyen pasos de configuración que deberían ejecutarse al clonar (instalar hooks pre-commit, descargar objetos LFS, inicializar submódulos). Git no ejecuta hooks al clonar, pero puedes encadenarlos:
git clone --recurse-submodules <url> repo
cd repo
git lfs install
pre-commit install
Para nuevos contribuyentes, documenta esta secuencia en CONTRIBUTING.md o envuélvela en un script scripts/bootstrap. Los proyectos inteligentes hacen su objetivo make setup idempotente para que volver a ejecutarlo tras un clone obsoleto sea seguro.
Errores comunes
Clonar en un directorio no vacío: Git se rehúsa a menos que pases un destino vacío explícito. Clonar repositorios enormes sin --depth en conexiones lentas, y luego rendirse a la mitad. Clonar por HTTPS a un servidor que requiere SSO, y luego no poder hacer push porque tu token carece del scope correcto. Siempre prueba con git push --dry-run después del primer commit. Finalmente, clonar en ~/Desktop u otra carpeta de sincronización (Dropbox, iCloud, OneDrive) lleva a corrupción cuando el cliente de sincronización escribe a medio camino sobre .git/index. Mantén los clones de trabajo en almacenamiento local plano.