Git Submodule
Última actualización
Un submódulo incrusta un repositorio Git dentro de otro, fijado a un commit específico. El repo padre registra de qué commit del submódulo depende, para que todos obtengan la misma versión. Es la forma de incluir una biblioteca o componente compartido que vive en su propio repositorio sin copiar su código.
Prueba esto en el terminal playground - una shell real en tu navegador, sin nada que instalar.
Sintaxis
| Command | What it does |
|---|---|
git submodule add <url> libs/x | Añadir un repo como submódulo en libs/x |
git clone --recurse-submodules <url> | Clonar un repo y sus submódulos |
git submodule update --init --recursive | Inicializar y traer submódulos tras un clon simple |
git submodule update --remote | Actualizar submódulos a su último commit |
git submodule status | Mostrar el commit de cada submódulo |
Casos comunes
| Goal | Command |
|---|---|
| Clonar un proyecto que usa submódulos | git clone --recurse-submodules <url> |
| Traer submódulos después de haber clonado | git submodule update --init --recursive |
| Subir un submódulo a su versión más reciente | git submodule update --remote |
Preguntas frecuentes sobre git submodule
¿Qué es un git submodule?
Un submódulo es un repositorio Git anidado dentro de otro repositorio Git en un commit fijo. El repo padre almacena un puntero a ese commit exacto en lugar de los archivos del submódulo, para que los colaboradores obtengan la misma versión. Se usa para incluir una dependencia o un componente compartido que tiene su propio repo e historial.
¿Cómo clono un repositorio con submódulos?
Usa
git clone --recurse-submodules <url> para clonar el padre y todos sus submódulos en un solo paso. Si ya clonaste sin esa opción, ejecuta después git submodule update --init --recursive para poblar las carpetas de los submódulos.¿Cómo actualizo un submódulo al último commit?
Ejecuta
git submodule update --remote, que trae la rama rastreada de cada submódulo y lo mueve al último commit. Luego confirma el cambio en el repo padre, ya que el padre registra a qué commit del submódulo apunta - la actualización no se guarda hasta que confirmas ese puntero.¿Por qué mi carpeta de submódulo está vacía después de clonar?
Porque clonaste sin
--recurse-submodules, así que Git creó las carpetas pero no trajo su contenido. Arréglalo con git submodule update --init --recursive, que inicializa y descarga cada submódulo.¿Puedo practicar esto en línea?
Sí. Abre el terminal playground para ejecutar
git submodule en una shell real en tu navegador - sin nada que instalar. El curso interactivo y gratuito de Git de Coddy también cubre paso a paso la configuración de repositorios.