En el mundo del desarrollo de software, una de las decisiones más importantes que debes tomar es cómo organizar tu código y tus recursos. ¿Deberías usar submódulos o un monorepo? Ambos tienen sus ventajas y desventajas, y la elección adecuada dependerá de las necesidades y características de tu proyecto.
En un lado tenemos los submódulos, una característica de Git que permite vincular un repositorio dentro de otro repositorio, permitiendo mantener un control de versiones independiente para cada uno de ellos. Por otro lado, los monorepos, una estructura de repositorio donde todo el código de un proyecto o conjunto de proyectos está alojado en un solo repositorio, facilitando la colaboración y la gestión de dependencias.
Cada una de estas opciones tiene sus propios beneficios y desventajas, pero ¿Cuál es la mejor opción para tu proyecto? Descubre a lo largo de este documento, las ventajas y desventajas de cada opción y cómo elegir la mejor estrategia para organizar tu código. ¡No te pierdas esta oportunidad de conocer más sobre submódulos y monorepos!
Qué son los Submódulos
Son una característica de Git que fue introducida en la versión 1.5.3, lanzada en 2008. La idea detrás de los submódulos es permitir a los desarrolladores vincular un repositorio de Git dentro de otro repositorio de Git, de manera que puedan mantener un control de versiones independiente para cada uno de los repositorios vinculados.
La implementación de los submódulos es bastante sencilla. Para agregar un submódulo a tu repositorio actual, debes ejecutar el siguiente comando en tu línea de comandos dentro del repositorio principal:
git submodule add <url del repositorio> <ruta donde se agregará el submódulo>
Por ejemplo, si quieres agregar un repositorio llamado "repo-secundario" a tu repositorio principal en una carpeta llamada "submodulos", ejecutarías el siguiente comando:
git submodule add https://github.com/usuario/repo-secundario.git submodulos/repo-secundario
Una vez agregado el submódulo, debes confirmar los cambios con un
y subirlos al repositorio principal con un git commit
.git push
Para actualizar un submódulo, debes entrar en la carpeta del submódulo y ejecutar un
para obtener las últimas actualizaciones del repositorio remoto. Una vez actualizado el submódulo, debes volver al repositorio principal y ejecutar git pull
para confirmar los cambios.git commit
En resumen, los submódulos son una característica de Git que permite vincular un repositorio dentro de otro repositorio, y mantener un control de versiones independiente para cada uno de ellos. Se implementan mediante el uso de comandos de git como
, git submodule add
, entre otros.git submodule update --remote
Ejemplo práctico de uso de submódulos
Tengo un repositorio sobre Go en 30 días, además otro sobre Web Scraper With Go. Necesito crear un directorio llamado Projects
dentro de Go en 30 días, esto, con el objetivo de almacenar y documentar proyectos sobre Go; por lo cual, me interesa que proyectos aislados como Web Scraper With Go, sea parte de los proyectos, pero, sin perder el repositorio original. Todo esto con la intención de que si un día actualizo el repositorio Web Scraper With Go, también sea actualizado dentro del repositorio Go en 30 días.
Lo primero es ubicarse en el repositorio padre, en el directorio Projects
.
$ git submodule add https://github.com/jersonmartinez/Web-Scraper-with-Go.git Web-Scraper-With-Go
Cloning into 'C:/Users/Jerson Martínez/OneDrive/Documentos/Projects/Repositories/30-Days-Of-Go/Projects/Web-Scraper-With-Go'...
remote: Enumerating objects: 16, done.
remote: Counting objects: 100% (16/16), done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 16 (delta 3), reused 12 (delta 2), pack-reused 0
Receiving objects: 100% (16/16), 4.93 KiB | 4.93 MiB/s, done.
Resolving deltas: 100% (3/3), done.
Para listar los submódulos en el repositorio padre, se puede hacer de dos maneras:
$ git submodule
a13aa8229875539c75306221d8c053205a2efee3 Web-Scraper-With-Go (heads/main)
$ git submodule status
a13aa8229875539c75306221d8c053205a2efee3 Web-Scraper-With-Go (heads/main)
Si se revisa el estado del repositorio padre, se encontrará que existen nuevos archivos, tanto el .gitmodules
, como los del nuevo repo. Estos ya estarán en el área de preparación, por lo que no necesitará agregar los cambios, solamente confirmarlos y cargarlos a GitHub.
El archivo .gitmodules
tiene el siguiente contenido:
[submodule "Projects/Web-Scraper-With-Go"]
path = Projects/Web-Scraper-With-Go
url = https://github.com/jersonmartinez/Web-Scraper-with-Go.git
Ya que los datos estén publicados, en GitHub se ve de la siguiente manera:
Ventajas de usar submódulos
Algunas de las características más importantes de los submódulos en Git son:
Desventajas de usar submódulos
Aunque los submódulos en Git tienen varias ventajas, también existen algunas desventajas en su uso. Algunas de las desventajas más importantes de los submódulos en Git son:
Qué son los Monorepos
Los monorepos son una estructura de repositorio de Git donde todo el código de un proyecto o conjunto de proyectos está alojado en un solo repositorio. El término "monorepo" es una contracción de "mono" (unico) y "repo" (repositorio). La idea detrás de los monorepos es tener todo el código y los recursos relacionados en un solo lugar, lo que facilita la colaboración y la gestión de dependencias.
El origen de los monorepos es difícil de establecer con certeza, pero se cree que el concepto se originó en los equipos de desarrollo de Google en los primeros años 2000. Google utilizó monorepos para alojar todo el código de sus proyectos en un solo lugar, lo que les permitió colaborar de manera más eficiente y manejar las dependencias de manera más sencilla.
Para implementar un monorepo, simplemente creas un repositorio de Git como lo harías normalmente, y luego agregas todos los proyectos y recursos relacionados en ese repositorio. Puedes utilizar ramas para organizar los proyectos y recursos dentro del monorepo.
Ventajas de usar monorepos
Algunas de las características más importantes de los monorepos son:
Desventajas de usar monorepos
Aunque los monorepos tienen varias ventajas, también existen algunas desventajas en su uso. Algunas de las desventajas más importantes de los monorepos son:
En resumen, los monorepos tienen sus ventajas y desventajas, pero es importante evaluar cual es la mejor opción para tu proyecto y equipo de desarrollo.
Empresas que usan monorepos y submódulos
Muchas grandes empresas utilizan monorepos para organizar y mantener su código y recursos.
Google
Facebook:
Microsoft:
Asimismo también Uber, Airbnb, Netflix, entre otros, que utilizan monorepos para alojar y manejar el código de sus aplicaciones y servicios.
Es importante mencionar que estas son solo algunos ejemplos, hay muchas otras empresas que utilizan monorepos para organizar y mantener su código.
Es difícil proporcionar una lista de empresas específicas que utilizan submódulos, ya que esta característica es parte de Git y es ampliamente utilizada. Por lo tanto, muchas empresas y desarrolladores individuales utilizan submódulos en sus proyectos. Sin embargo, es importante mencionar que el uso de submódulos en una empresa puede variar dependiendo de su estructura, políticas y proyectos específicos.
Cuál elegir: Submódulos o Monorepos
La elección entre usar submódulos o un monorepo dependerá de las necesidades y características de tu proyecto.
Submódulos son una buena opción cuando tienes varios proyectos independientes que deseas mantener juntos, pero que también deseas mantener un control de versiones independiente para cada uno de ellos. Los submódulos te permiten vincular un repositorio de Git dentro de otro repositorio de Git y mantener un control de versiones independiente para cada uno de ellos.
Por otro lado, un monorepo es una buena opción si tienes un proyecto grande o varios proyectos relacionados que deseas mantener juntos en un solo repositorio. Con un monorepo, todo el código y los recursos están alojados en un solo lugar, lo que facilita la colaboración y la gestión de dependencias. Además, es más fácil de entender y manejar para los desarrolladores, ya que todo el código está en un solo lugar.
Otras soluciones
Además de los submódulos y monorepos, hay varias otras estrategias y herramientas para organizar y mantener tu código y recursos en un proyecto de software. Algunas de las opciones más comunes son:
Cada una de estas opciones tiene sus propios beneficios y desventajas, y la elección adecuada dependerá de las necesidades y características de tu proyecto. Es importante evaluar cuál es la mejor opción para tu proyecto y equipo de desarrollo.
En conclusión, tanto los submódulos como los monorepos son herramientas útiles para organizar y mantener tu código y recursos en un proyecto de software. Cada una de estas opciones tiene sus propios beneficios y desventajas, y la elección adecuada dependerá de las necesidades y características de tu proyecto.
Parte de la información sobre submódulos fue obtenida del libro “Git y GitHub hacia una cultura DevOps”.
With supporting text below as a natural lead-in to additional content.
Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled.