Estrategias para Organizar Repositorios: Mono Repo, Multi Repo, Meta Repo

https://unsplash.com/photos/FO7JIlwjOtU

Al momento de almacenar nuestro código en Github, Gitlab o similares podemos elegir distintas formas de organizar los repositorios. Dos formas muy usadas son:

  • Tener un repositorio gigante con todo el código fuente de los proyectos
  • Tener un repositorio separado por cada proyecto.

Cada uno de estas alternativas tiene características tanto negativas como positivas.

Mono Repositorio

Este contiene todo el código fuente de distintos proyectos en un solo repositorio.

Los principales beneficios están en que se disminuye la entropía del código fuente, permitiendo a las personas de una organización ubicar rápidamente los artefactos disponibles. Facilitando la re-utilización de bibliotecas, herramientas, documentación y soluciones entre distintos proyectos.

Los principales inconvenientes están en que el acceso es total. Por lo que tener una asignación de permisos granular al código es más complicado. Además de que realizar procesos de continuos integration y continuos deployment requeriría de configuraciones adicionales. Finalmente si se tiene un repositorio de varios gigabytes puede ser un poco más complicado el proceso de obtención de código y contribución.

Lecturas Complementarias:

Multi Repositorio

Esta es una estrategia en que cada repositorio es un proyecto diferente.

Los principales beneficios están en que se puede tener un control preciso de quién puede tener acceso al código fuente, además de que facilita el proceso de continuos integration y continuos deployment al ser solamente un proyecto por repositorio. Finalmente el peso de cada repositorio depende de cada proyecto y normalmente son más livianos que un mono repositorio.

Los principales inconvenientes están en que se dificulta la gestión de cambios, compartir artefactos y monitoreo de bugs. Al tener múltiples repositorios la gestión de issues y cambios se ve fragmentada y las personas tendrán que constantemente estar pendientes de cambios en las APIS o bugs de sus dependencias en múltiples lugares a la vez. Mientras más repositorios se cuente más fragmentado estará el ecosistema y se deberá utilizar herramientas complementarias y procesos estandarizados para disminuir la dispersión de información .

Repositorio Meta

Esta es una estrategia que intenta combinar las dos anteriores. Tener múltiples repositorios pero adicionalmente uno donde integre todos para mejorar la visibilidad y disminuir la dispersión.
Proyectos como Lerna y Meta ofrecen herramientas para mejorar la gestión de múltiples repos.

Lecturas Complementarias:

¿Cómo Definir la estrategia a usar?

La elección de la estrategia claramente depende del contexto al cual se aplicará.

Por ejemplo si tenemos varios proyectos personales o un proyecto tipo biblioteca o framework quizás unificar sus dependencias y componentes en un solo repositorio sea lo más simple.

Si tenemos proyectos para múltiples clientes puede que separarlos en varios repositorios sea lo mejor. Cada cliente con su único y propio repositorio para que tenga acceso al código fuente de todos sus proyectos. La elección de mono o multi repo dependerá de las necesidades de cada cliente.

Puede que el proyecto necesite de varios sub proyectos para funcionar: Backend, iOS, Android, Frontend... En este caso puede que un repositorio Meta pueda ser de utilidad.

Conclusión

La gestión de repositorios es importante tanto en proyectos de índole pública como privada. La elección de una buena estrategia para gestionarlos se debería considerar como uno de los estándares que toda organización debe establecer.