git submodule

Espacios de trabajo y proyectos grandes

Incluye otros repositorios dentro de tu repositorio


El comando 'git submodule' integra otro repositorio Git en una de tus carpetas, fijado a un commit exacto. Tu repositorio solo registra qué commit del submódulo usar; el submódulo conserva su propio historial. Así incluyen los proyectos bibliotecas compartidas que no quieren copiar. Al clonar hace falta --recurse-submodules (o git submodule update --init) para traerlos.

Sinopsis

git submodule add <url> [<path>]
git submodule update --init --recursive
git submodule status
git submodule foreach <command>
[ ] opcional| o<arg> valor a sustituir... repetible--flag opción

Ejemplos

Añadir una biblioteca

git submodule add https://github.com/acme/ui.git lib/ui

La clona y registra su commit.


Tras clonar

git submodule update --init --recursive

Traer todos los submódulos.


Clonar con ellos

git clone --recurse-submodules <url>

Todo en un paso.


Actualizar a lo último

git submodule update --remote

Llevar cada submódulo al último commit de su rama.

Ejemplos de flujos de trabajo

1
cd lib/ui && git pull

Hacer avanzar el submódulo

2
cd ../.. && git add lib/ui

Registrar el nuevo commit

3
git commit -m "Update ui library"

Confirmarlo

Solución de problemas

Carpeta de submódulo vacía

Causa: No se trajeron los submódulos

git submodule update --init --recursive

Consejos y trampas

Buenas prácticas

  • ✓Configura git config --global submodule.recurse true para que pull y checkout actualicen los submódulos.

Errores comunes

  • ✗Clonar sin --recurse-submodules y obtener carpetas vacías.
  • ✗Confirmar dentro de un submódulo con HEAD separado y perder el trabajo.
  • ✗Olvidar confirmar el nuevo commit del submódulo en el repositorio padre.

Preguntas frecuentes

A:

Solo la URL del submódulo (en .gitmodules) y el commit exacto que usa.