Submódulos en git

Como muchas cosas de este blog, esto esta aquí porque no lo hago tan seguido y se me suele olvidar.

En general no soy muy fan de los submódulos porque se fácil abusar de ellos, pero en el caso específico de contar con una referencia a un punto en particular de la historia de otro proyecto del que no tienes control creo que es buena idea usarlos.

La información viene en su mayoría de la Documentación oficial. Solo la parte sobre cómo eliminar submódulos viene de Stack Overflow.

Añadir un submódulo

Naturalmente este es el primer paso...

git submodule add <repo> [<ruta>]

Clonar un proyecto con submódulos

Porque por alguna razón no se clonan solitos con submódulos. Nótese que en algunos entornos como por ejemplo en algunos sistemas de integración contínua, notablemente en gitlab, es necesario hacer algo especial para clonar un proyecto con sus subódulos.

git clone --recurse-submodules <repo>

O si ya está clonado el proyecto y quieres bajar los submódulos:

git submodule init
git submodule update

Actualizar un submódulo

Si estás en el directorio de un submódulo puedes realizar algunas operaciones como fetch, merge, asumo que pull y checkout que te permitirán escoger con precisión el commit en el que debería estar fijo el submódulo.

En la Documentación oficial hablan con más detinimiento de esto.

Eliminar un submódulo

Porque a veces simplemente tenemos que decir adiós. Según se comenta en Stack Overflow en las versiones más recientes de git es tan fácil como hacer:

git rm <ruta>

Mientras que en versiones anteriores era necesario hacer algunos malabares. Checa en esa liga si es tu caso.