GIT - Utilizando GIT, submódulos

Inicializar repositorios

Inicializar un repositorio en el directorio actual.

git init

Clonar repositorio como submódulo. En este caso no queremos el repositorio completo por ello utilizamos --depth 1. Añadiremos el submódulo con git submodule add. Esto generará un fichero .gitmodules. Establemos el nombre de la rama que queremos usar y el tipo de update con git config.

git clone --depth 1 --reference submodulo -b main REPOSITORIO_MODULO submodulo
git submodule add REPOSITORIO_MODULO submodulo

Tras realizar la configuración del submódulo haremos el commit correspondiente

git commit -m"Add submodulo"

Ya podremos trabajar con normalidad con el repositorio. Si tenemos un repostorio remoto podemos hacer push de los cambios realizados

git push origin main

Actualizar submodulos

Cuando hay cambios en el repositorio remoto de nuestro submódulo podemos actualizarlo con los siguientes comandos.

git submodule update
git submodule update --remote

Esto creará una rama HEAD detached que nos permitirá, por ejemplo, crear una rama a partir de ella git switch -c update-YYYYMMDD-HHMMSS.

El comportación por defecto cuando se se hace un git submodule update --remote es hacer un checkout pero podemos indicar en el comando si queremos hacer un merge o un rebase

git submodule update --remote --merge
git submodule update --remote --rebase

Otra opción es configurar el comportamiento por defecto en el fichero .gitmodules

git config -f .gitmodules submodule.submodulo.branch NOMBRE_RAMA
git config -f .gitmodules submodule.submodulo.branch main

git config -f .gitmodules submodule.submodulo.update TIPO_ACTUALIZACION
git config -f .gitmodules submodule.submodulo.update merge
git config -f .gitmodules submodule.submodulo.update rebase
git config -f .gitmodules submodule.submodulo.update checkout

Clonando repositorios que continen submodulos

git clone REPOSITORIO_CON_SUBMODULOS
git submodule init
git submodule update