Clones Superficiales en Git: Cuándo y Cómo Usarlos
Usa clones superficiales para verificaciones rápidas de Git en CI y trabajos temporales, y aprende cómo profundizar o deshacer la superficialidad cuando necesites más historial.
Clones Superficiales en Git: Cuándo y Cómo Usarlos
Los clones superficiales en Git obtienen solo una parte del historial de confirmaciones. Son útiles cuando un trabajo de CI, un paso de despliegue o una tarea de inspección rápida necesita el código actual pero no años de historial.
No son la mejor opción predeterminada para cada estación de trabajo de desarrollador. Un clon superficial puede ahorrar tiempo y espacio en disco, pero también limita los comandos basados en el historial hasta que obtengas más confirmaciones.
¿Qué es un Clon Superficial?
Un clon estándar obtiene suficiente historial para el trabajo normal de ramas, inspección de historial, verificación de etiquetas antiguas e investigación sin conexión. Un clon superficial trunca ese historial a una profundidad que tú eliges.
Por ejemplo, --depth 1 obtiene la confirmación más reciente de la rama seleccionada. --depth 50 obtiene un historial más reciente, pero aún no la ascendencia completa.
Beneficios de Usar Clones Superficiales
El principal beneficio es un menor costo de transferencia:
- Verificación inicial más rápida para repositorios grandes.
- Menor uso de disco en agentes de compilación de corta duración.
- Menor uso de ancho de banda en redes lentas o medidas.
- Menos historial que Git debe procesar durante el clon inicial.
En un pipeline de CI que compila la confirmación actual y descarta el espacio de trabajo, un clon superficial suele ser una ventaja clara.
Desventajas y Limitaciones de los Clones Superficiales
La compensación es la falta de historial:
git logse detiene en el límite superficial.git blamepuede no ser capaz de seguir cambios antiguos.- Las etiquetas o confirmaciones antiguas pueden no estar disponibles hasta que se obtengan.
- Los rebases y fusiones pueden ser más difíciles si Git necesita una base de fusión faltante.
- Algunos flujos de trabajo de lanzamiento o auditoría esperan un historial completo.
Si tu trabajo a menudo implica depurar regresiones antiguas, preparar lanzamientos o aplicar cambios a versiones anteriores, comienza con un clon completo.
Cómo Crear un Clon Superficial
Usa git clone --depth:
git clone --depth <número> <url_del_repositorio>
Por ejemplo, para clonar un repositorio y obtener solo las últimas 10 confirmaciones:
git clone --depth 10 https://github.com/ejemplo/repositorio-grande.git
Para un trabajo de compilación que solo necesita la punta de la rama:
git clone --depth 1 https://github.com/ejemplo/proyecto.git
Para clonar una rama específica:
git clone --depth 1 -b develop https://github.com/ejemplo/proyecto.git
También puedes agregar --single-branch cuando solo quieras historial para esa rama:
git clone --depth 1 --single-branch --branch develop https://github.com/ejemplo/proyecto.git
Gestión de Clones Superficiales
Obtener Más Historial (Profundizar el Clon)
Si necesitas más historial después de clonar, profundiza el repositorio:
git fetch --deepen=50 origin
Eso obtiene 50 confirmaciones más allá del límite superficial actual.
También puedes establecer la profundidad total que deseas:
git fetch --depth=100 origin
El punto importante: git remote set-depth no es un comando válido de Git. La profundidad se controla a través de las opciones de clon y fetch.
Obtener Etiquetas
Los clones superficiales pueden no incluir todas las etiquetas, especialmente las que apuntan a confirmaciones antiguas. Obtén etiquetas solo si tu flujo de trabajo las necesita:
git fetch --tags origin
Deshacer la Superficialidad de un Repositorio
Para convertir un clon superficial en un clon completo, obtén el resto del historial:
git fetch --unshallow origin
Este comando descargará el historial restante del repositorio remoto.
Empujar desde un Clon Superficial
Empujar desde un clon superficial puede funcionar cuando tus nuevas confirmaciones se basan en la punta de la rama remota que obtuviste. Sin embargo, sigue siendo una mala opción para el desarrollo a largo plazo porque la falta de historial puede hacer que los rebases, la resolución de conflictos y la revisión sean más difíciles.
Si encuentras problemas de empuje o fusión relacionados con el historial, obtén más historial o deshaz la superficialidad del clon antes de continuar.
Cuándo Usar Clones Superficiales
Úsalos cuando el trabajo sea de corta duración y el historial no sea importante:
- Verificación de CI/CD.
- Inspección de solo lectura.
- Entornos de reproducción temporales.
- Compilaciones de documentación.
- Repositorios grandes en redes lentas.
Cuándo No Usar Clones Superficiales
Evítalos cuando necesites regularmente:
git log,git blameogit bisectprofundos.- Trabajo de lanzamiento que use etiquetas antiguas.
- Trabajo complejo de fusión o rebase.
- Depuración sin conexión a través del historial.
- Flujos de trabajo de contribución que esperen un clon completo.
Conclusión Práctica
Usa git clone --depth 1 para trabajos desechables que solo necesiten el código más reciente. Usa un clon completo para el desarrollo normal a menos que tengas una razón clara para no hacerlo.
Si un clon superficial comienza a estorbar, profúndalo con git fetch --deepen=<número> origin o conviértelo con git fetch --unshallow origin. Eso suele ser más rápido y seguro que luchar contra errores de historial faltante un comando a la vez.