====== Submódulos ====== Sección perteneciente al curso [[informatica:programacion:cursos:control_version_git_avanzado|Control de versiones con Git Avanzado]]. ===== Introducción ===== A veces estaremos desarrollando una aplicación modular que puede tener partes de código que están compartidas con otras aplicaciones o en las que hay un grupo de desarrolladores que solo toca cierto código. En estos casos, tener un solo repositorio git para toda la aplicación, implica que todos los desarrolladores estén tocando un mismo código que podría estar separado. Para esto, git ofrece los submódulos: repositorios git, dentro de otro repositorio git. Un repositorio git "padre" que está controlando los cambios en repositorios "hijo". Estos repositorios hijo pueden estar aislados entre sí y no saber nada del padre. ===== Repositorios anidados ===== Tener repositorios dentro de otros (repositorios anidados) de manera independiente es posible con git gracias a los **submódulos**. Útil para cuando hay jerarquía de proyectos/módulos. Hay poca documentación sobre los submódulos y es muy técnica lo que hace que sea algo difícil manejarse con ellos ===== Como crearlos y como trabajar con ellos ===== ==== Añadir submódulo al módulo padre ==== git submodule add [subcarpeta] El submódulo tendrá su propio repositorio remoto, que será totalmente independiente del repositorio padre. El padre tendrá referencias a él. El repositorio padre generará un archivo ''.gitmodules'' con información sobre los submódulos que le hemos añadido. ==== Clonar un módulo padre con sus submódulos ==== Método 1: git clone --recurse-submodules Método 2: git clone git submodule init git submodule update ==== Actualizar submódulos (desde repositorio padre) ==== git pull git submodule update [nombre_submódulo] ===== Conclusión ===== ===== Recursos ===== * Capítulo del libro Pro Git sobre submódulos: * [[https://git-scm.com/book/en/v2/Git-Tools-Submodules|Inglés]] * [[https://git-scm.com/book/es/v2/Herramientas-de-Git-Subm%C3%B3dulos|Castellano]] * [[https://chrisjean.com/git-submodules-adding-using-removing-and-updating/|Artículo "Git Submodules: Adding, Using, Removing, Updating"]] * [[https://www.atlassian.com/blog/git/git-submodules-workflows-tips|Artículo "Git submodules: core concept, workflows, and tips"]]