Administrar múltiples versiones de una aplicación web usando Git

12

Tenemos una familia de aplicaciones, todas con la misma base. Hasta ahora he estado desarrollando esta base, y el flujo de trabajo de Git era muy simple:

  • El desarrollo se realiza en developrama
  • Se desarrollan nuevas funciones en name-of-the-featurerama
  • Los lanzamientos se realizan en release-**rama

Hasta ahora, el código era el mismo para todas las aplicaciones de la familia. Digamos que la base que comparten ahora está completa, y de ahora en adelante el código será diferente para cada aplicación.

No estoy seguro de cómo debo tratar con git y estas múltiples aplicaciones que tienen la misma base.

  • ¿Debería cada uno de ellos tener su propio proyecto git ?
  • ¿Deberían estar en el mismo proyecto, pero cada uno en su propia rama ?

El punto es: si los pongo en proyectos separados, cada modificación realizada en la base de la aplicación tendrá que repetirme en cada una de las aplicaciones. No estoy muy familiarizado con git , pero si almaceno cada proyecto en una rama , ¿será posible fusionar la modificación base con cada aplicación?

¿Alguien ha experimentado una situación como esta? No estoy seguro de cómo proceder.

¡Gracias!

EDITADO Cuando dije la versión no me refería a los números de versión. En realidad, son aplicaciones diferentes que comparten la misma base.

João Daniel
fuente

Respuestas:

7

Deje la aplicación base en su propio repositorio y cree nuevos proyectos que dependan del jar que compila desde ese repositorio.

Las ramas de Git no son para múltiples aplicaciones. Git prefiere que use un repositorio para cada proyecto o una familia de proyectos relacionados. Las ramas están ahí para que pueda desarrollar características de forma aislada, no para que pueda crear un proyecto completamente nuevo sin salir del repositorio.

No desea tener múltiples aplicaciones que compartan código, eso es una pesadilla de mantenimiento. Si, como sugiere, desarrolla cada uno como una rama en su repositorio central, tendrá una gran fusión para propagar los cambios en cada aplicación. Es mucho más fácil depender de una biblioteca única y separada y usar algo como Apache Maven para atraer las dependencias del proyecto.

Michael K
fuente
Gran parte del código que se comparte es código GWT (vistas, servicios, etc.). ¿Es posible extraerlo a una biblioteca jar? ¿O simplemente es posible el código Java del lado del servidor?
João Daniel
Los elementos de vista se pueden extraer, pero posiblemente no en un frasco. Por ejemplo, javascript se puede extraer de cada página en un solo archivo que luego se puede incluir en cada proyecto. El código común JSP debe extraerse en las etiquetas JSP. Probablemente no necesite extraer páginas enteras, pero no conozco su proyecto, por lo que podría estar equivocado.
Michael K
¿Qué opinas de este enfoque: stackoverflow.com/a/2540471/2615737 ? parece razonable ...
Francisco Corrales Morales
No creo que sea el mismo caso de uso. Esa respuesta trata con dos versiones de la misma aplicación que son muy diferentes, mientras que esta pregunta es sobre lo que veo como aplicaciones completamente diferentes. Todavía prefiero no tener la rama en absoluto, incluso en el caso "ligeramente diferente"; sin embargo, es difícil descifrar la funcionalidad para separar bibliotecas en Android si hay alguna vista xmls involucrada. Parece que ese respondedor no pensó que valiera la pena por su situación.
Michael K
6

Si las aplicaciones no modifican la base en sí, considere dejar la base en su propio repositorio. Luego cree un nuevo repositorio para cada una de las aplicaciones individuales y agregue la base como un submódulo git .

jhenninger
fuente