Diseño de proyecto grande: agregar una nueva función en múltiples subproyectos

13

Quiero saber cómo administrar un proyecto grande con muchos componentes con un sistema de administración de control de versiones.

En mi proyecto actual hay 4 partes principales.

  1. Web
  2. servidor
  3. Consola de administración
  4. Plataforma.

La web y la parte del servidor usan 2 bibliotecas que escribí. En total hay 5 repositorios git y 1 repositorio mercurial. El script de compilación del proyecto está en el repositorio de la plataforma. Automatiza todo el proceso de construcción.

El problema es cuando agrego una nueva característica que afecta a múltiples componentes que tengo que crear una rama para cada uno de los repositorios afectados. Implementar la característica. Fusionar de nuevo. Mi intuición es "algo está mal".

¿Debo crear un solo repositorio y colocar todos los componentes allí? Creo que la ramificación será más fácil en ese caso. O simplemente hago lo que estoy haciendo ahora mismo. En ese caso, ¿cómo resuelvo este problema de crear sucursales en cada repositorio?

    
pregunta Shiplu Mokaddim 11.06.2013 - 20:15

2 respuestas

7

En la situación que describe, no obtiene ningún beneficio al tener múltiples repositorios, pero sí tiene un costo: no puede revertir a una versión anterior de un repositorio, y confía en que su sistema continuará trabajar. Esto se debe a que su código está estrechamente acoplado entre los repositorios. Como la confianza en la capacidad de revertir es uno de los principales beneficios del control de código fuente, esta no es la situación en la que desea estar.

La solución es definir su estructura de repositorio en función del acoplamiento del código que contiene: si el componente A del proyecto comparte solo interfaces estables con el componente B del proyecto, entonces se pueden colocar en repositorios separados. De lo contrario, deberían estar ubicados en el mismo repositorio. Un diseño más amplio del repositorio reflejará una arquitectura de sistema mejor factorizada.

    
respondido por el Aidan Cully 12.06.2013 - 16:18
2

Si cada uno de sus repositorios son proyectos o bibliotecas independientes, entonces diría que no hay nada intrínsecamente erróneo en la necesidad de crear sucursales de características en cada repositorio al agregar nuevas funciones que se cruzan en todos los proyectos. Al ser independientes, cada una puede ser versionada de manera independiente y puede dejar de usar las API antiguas.

Pero en su caso particular, parece que sus repositorios podrían no estar agrupando su código de manera efectiva. Si los cambios en el código en un repositorio requieren cambios en los demás (aparte de la desaprobación), entonces su acoplamiento es demasiado ajustado o los repositorios deberían reorganizarse.

Si todos los repositorios son realmente parte del mismo proyecto (no pueden estar solos), quizás solo debas tener 1 repositorio. (O tal vez 2: el proyecto principal y uno para la funcionalidad genérica / estandarizada).

    
respondido por el Allan 25.06.2013 - 21:56

Lea otras preguntas en las etiquetas