Agregar submódulo:
$ git submodule add <url del submódulo> <ruta del submódulo>
Ejemplo:
$ git submodule add https://sitio-web.dominio/proyecto.git deps/proyecto
Clonar un proyecto que usa submódulos:
Ahora, cuando clonamos un proyecto que tiene submódulos, estos no se descargan automáticamente, a pesar de que se crean sus directorios. Para descargar los submódulos tenemos que hacer lo siguiente:
# Primero, inicializar todos los submódulos
$ git submodule init
# Luego y por último descargarlos
$ git submodule update
Actualizar submódulos:
Cuando desarrollamos submódulos en paralelo con nuestro proyecto principal, a menudo queremos estar actualizando nuestras dependencias, para esto, bastará con entrar al directorio donde tenemos nuestro submódulo y hacer pull (git pull), o si lo que queremos es actualizar todos los submódulos al mismo tiempo:
$ git submodule foreach git pull
Si lo que queremos es eliminar un submódulo que ya no usaremos, debemos seguir varios pasos:
1. Lo primero es abrir el archivo .gitmodules y eliminar las lineas que contengan información de este módulo. Este archivo luce así:
[submodule "deps/zlib"] path = deps/zlib url = git@github.com:sigifredo/zlib.git [submodule "deps/libgit2"] path = deps/libgit2 url = git@github.com:sigifredo/libgit2.git |
Archivo: .gitmodules |
Debemos eliminar las lineas en negrilla.
2. También tendremos que abrir el archivo .git/config y eliminar la configuración del submódulo. De nuevo, el archivo luce así:
[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true hideDotFiles = dotGitOnly [remote "origin"] url = git@github.com:sigifredo/gito.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "development"] remote = origin merge = refs/heads/development [submodule "deps/zlib"] url = git@github.com:sigifredo/zlib.git [submodule "deps/libgit2"] url = git@github.com:sigifredo/libgit2.git |
Archivo: .git/config |
Debemos eliminar las lineas en negrilla.
3. Por último, debemos eliminar el directorio del submódulo de la siguiente manera:
$ git rm --cached <dirección del submódulo>
Ejemplo:
$ git rm --cached deps/proyecto
Estos son los procedimientos básicos para trabajar con los submódulos de Git. Espero les sea de mucha ayuda en su proceso de desarrollo. Un saludo.
Referencias:
- Página oficial del proyecto: http://git-scm.com/
- Git Book (en ingles): http://git-scm.com/book