Hola a todos. Últimamente he estado estudiando un poco de Git, y encontré una funcionalidad que puede ser de mucha ayuda cuando tenemos sistemas muy grandes, o muchas dependencias que son desarrolladas en paralelo a nuestro proyecto. Los submódulos nos permiten tener un directorio dentro de nuestro proyecto Git que es a su vez un proyecto Git totalmente a parte. A continuación, veremos como hacer uso de estos:
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