Sinopsis
git clone [--branch <name>] [--depth <n>] [--recurse-submodules] <url> [directory]
Descripción
El comando git clone copia un repositorio existente (típicamente desde un servidor remoto) en un nuevo directorio local. Realiza tres acciones: crea un nuevo directorio, ejecuta git init dentro de él, y luego descarga todos los branches e historial desde el remoto. Después de clonar, el remoto se configura automáticamente como origin, y se hace checkout del branch predeterminado en el árbol de trabajo.
Clonar soporta múltiples protocolos: HTTPS (el más común, más fácil con asistentes de credenciales), SSH (preferido para acceso de escritura usando autenticación basada en claves) y el protocolo legacy git://. Para repositorios muy grandes, los clones parciales, los clones shallow y los sparse checkouts pueden reducir dramáticamente la cantidad de datos transferidos.
La autenticación es uno de los obstáculos más comunes. Con HTTPS, Git moderno usa asistentes de credenciales (Keychain en macOS, Credential Manager en Windows, libsecret en Linux) para cachear tokens o contraseñas de forma segura. Con SSH, tu agente SSH local proporciona la clave: asegúrate de que ssh-add la haya cargado. Después de clonar, git config --get remote.origin.url confirma lo que se configuró en realidad. Para repositorios a escala monorepo o supercomputadora, el clon parcial (--filter=blob:none) combinado con sparse checkout (git sparse-checkout init --cone) te permite trabajar con solo una porción del proyecto, reduciendo dramáticamente tanto el tiempo de clone como la huella en disco. Los pipelines de CI se benefician aún más de --depth=1 y --no-tags cuando no necesitan historial.
Opciones comunes
| Opción | Descripción |
|---|---|
--branch <name> / -b | Hace checkout del branch o tag nombrado en lugar del predeterminado. |
--depth <n> | Crea un clon shallow con historial truncado. |
--single-branch | Clona solo el historial de un único branch. |
--recurse-submodules | Inicializa y clona los submódulos inmediatamente después del clon principal. |
--filter=blob:none | Crea un clon parcial sin contenido de blob (descargado perezosamente bajo demanda). |
--bare | Hace un clon bare sin árbol de trabajo. |
--mirror | Configura un mirror con todas las refs, adecuado para respaldos. |
Ejemplos
git clone https://github.com/user/project.git
# Clon estándar sobre HTTPS
git clone [email protected]:user/project.git my-fork
# Clon vía SSH a un directorio específico
git clone --depth 1 --branch v2.0 https://github.com/user/project.git
# Clon shallow de un tag específico, útil para CI
git clone --filter=blob:none https://github.com/torvalds/linux.git
# Clon parcial para repos enormes - blobs descargados bajo demanda
Errores comunes
Clonar un repositorio gigantesco sin filtros puede tomar minutos u horas y consumir gigabytes. Para exploración o builds de CI, prefiere --depth 1. Otro error es clonar sobre HTTPS cuando pretendes hacer push de cambios: sin configuración de credenciales, cada push pedirá una contraseña. Usa SSH o un asistente de credenciales para acceso de escritura. Finalmente, ten en cuenta que los clones --single-branch no pueden acceder fácilmente a otros branches sin reconfigurar el remoto.
Comandos relacionados
git init, git fetch, git remote, git submodule