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