Cargando...

Mantén tu código ordenado y escalable con submódulos y monorepos

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 git commit y subirlos al repositorio principal con un git push.

Para actualizar un submódulo, debes entrar en la carpeta del submódulo y ejecutar un git pull para obtener las últimas actualizaciones del repositorio remoto. Una vez actualizado el submódulo, debes volver al repositorio principal y ejecutar git commit para confirmar los cambios.

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, git submodule update --remote, entre otros.

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:

Submódulo en GitHub

Ventajas de usar submódulos

Algunas de las características más importantes de los submódulos en Git son:

  • Permite vincular repositorios de Git dentro de otro repositorio de Git.
  • Permite mantener un control de versiones independiente para cada uno de los repositorios vinculados.
  • Permite organizar y mantener varios proyectos independientes en un solo repositorio.
  • Facilita la colaboración entre equipos de desarrollo trabajando en proyectos independientes pero relacionados.
  • Permite manejar dependencias entre proyectos de manera sencilla.
  • Es posible actualizar los submódulos individualmente, sin afectar al repositorio principal.
  • Se pueden utilizar diferentes ramas de un submódulo.
  • Es posible crear un submódulo dentro de otro submódulo.
  • Permite tener un historial de cambios independiente para cada submódulo.

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:

  • Puede ser difícil realizar un seguimiento de las dependencias entre los submódulos, ya que cada submódulo mantiene su propio control de versiones.
  • Puede ser más complejo actualizar los submódulos si estos están muy desfasados con respecto a la versión más reciente del repositorio remoto.
  • Si un submódulo es eliminado o movido, el repositorio principal todavía tiene una referencia a él, lo que puede causar problemas.
  • Puede ser difícil de entender para algunos desarrolladores que no estén familiarizados con la característica de los submódulos.

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:

  • 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.
  • Es fácil de entender y manejar para los desarrolladores, ya que todo el código está en un solo lugar.
  • Facilita la implementación de herramientas de construcción, pruebas y despliegue, ya que todo el código está en un solo lugar.
  • Ayuda a evitar problemas de dependencias entre diferentes proyectos.
  • Es posible utilizar ramas para organizar los proyectos y recursos dentro del monorepo.
  • Facilita la colaboración entre equipos de desarrollo trabajando en proyectos relacionados.
  • Facilita el rastreo de cambios y la resolución de problemas a través del historial del repositorio.

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:

  • El tamaño del repositorio puede crecer rápidamente, lo que puede hacer que sea difícil de clonar o descargar.
  • Puede ser difícil de escalar para proyectos muy grandes y con muchos desarrolladores.
  • Puede ser más difícil de mantener debido a la complejidad de las dependencias entre proyectos.
  • Puede ser más difícil de proteger debido a la gran cantidad de código y recursos alojados en un solo lugar.
  • Puede ser difícil de dividir en caso de necesidad, ya que todo el código está alojado en un solo lugar.
  • Puede ser más difícil de mantener la privacidad de algunos proyectos ya que todo el código está alojado en un solo lugar.

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

  • Ha utilizado monorepos durante años para alojar y manejar el código de sus productos, como Chrome, Android y Google Maps.

Facebook:

  • Utiliza monorepos para alojar y manejar el código de sus aplicaciones, como Facebook, Instagram y WhatsApp.

Microsoft:

  • Utiliza monorepos para alojar y manejar el código de sus productos, como Windows y Office.

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:

  • Repositorios Multiples: Es cuando tienes varios repositorios independientes para cada proyecto o componente. Es la estrategia opuesta al monorepo, cada proyecto tiene su propio repositorio.
  • Microservicios: Es un enfoque de arquitectura de software en el cual una aplicación se divide en pequeños servicios independientes que se comunican entre sí a través de una interfaz común.
  • Paquetes: Es una forma de distribuir y compartir código reutilizable. Los paquetes pueden ser administrados por medio de herramientas como npm o pip.
  • Control de versiones distribuido: Git es un ejemplo de un sistema de control de versiones distribuido, donde cada desarrollador tiene una copia completa del repositorio en su equipo local, y puede trabajar independientemente y fusionar sus cambios cuando sea necesario.
  • Versionado basado en etiquetas: Es una forma de marcar versiones específicas del software, para poder identificar y recuperar la versión en cualquier momento.

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”.

  • John Doe
    43 Sales$156,24 Totals
    62%
  • Rosy O'Dowell
    12 Leads$56,24 Totals
    32%

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.