Gérer plusieurs versions d'une application Web à l'aide de Git

12

Nous avons une famille d'applications, toutes ayant la même base. Jusqu'à présent, je développais cette base, et le workflow Git était très simple:

  • Le développement se fait en developbranche
  • De nouvelles fonctionnalités sont développées en name-of-the-featurebranche
  • Les sorties se font en release-**succursale

Jusqu'à présent, le code était le même pour toutes les applications de la famille. Disons que la base qu'ils partagent est maintenant complète et que le code sera désormais différent pour chaque application.

Je ne sais pas comment dois-je gérer git et ces multiples applications qui ont la même base.

  • Chacun devrait-il avoir son propre projet git ?
  • Doivent-ils être sur le même projet, mais chacun dans sa propre branche ?

Le fait est que si je les mets sur des projets séparés, chaque modification effectuée dans la base de l'application devra me être répétée dans chacune des applications. Je ne connais pas très bien git , mais si je stocke chaque projet dans une branche , sera-t-il possible de fusionner la modification de base avec chaque application?

Quelqu'un a-t-il vécu une telle situation? Je ne sais pas comment procéder.

Merci!

EDITÉ Quand j'ai dit la version, je ne voulais pas dire comme les numéros de version. Ce sont en fait des applications différentes qui partagent la même base.

João Daniel
la source

Réponses:

7

Laissez l'application de base dans son propre référentiel et créez de nouveaux projets qui dépendent du bocal que vous compilez à partir de ce référentiel.

Les branches Git ne sont pas pour plusieurs applications. Git préfère que vous utilisiez un référentiel pour chaque projet ou une famille de projets associée. Les branches sont là pour que vous puissiez développer des fonctionnalités isolément, pas pour créer un projet entièrement nouveau sans quitter le référentiel.

Vous ne voulez pas avoir plusieurs applications qui partagent le code - c'est un cauchemar de maintenance. Si, comme vous le suggérez, vous développez chacune en tant que branche dans votre référentiel central, vous aurez beaucoup de fusion en cours pour propager les modifications dans chaque application. Il est beaucoup plus facile de dépendre d'une bibliothèque unique et séparée et d'utiliser quelque chose comme Apache Maven pour extraire les dépendances du projet.

Michael K
la source
Une grande partie du code partagé est du code GWT (vues, services, etc.). Est-il possible de l'extraire dans une bibliothèque jar? Ou il est tout simplement possible de code Java côté serveur?
João Daniel
Les éléments de vue peuvent être extraits, mais éventuellement pas dans un bocal. Par exemple, javascript peut être extrait de chaque page dans un seul fichier qui peut ensuite être inclus dans chaque projet. Le code commun JSP doit être extrait dans les balises JSP. Vous n'avez probablement pas besoin de tirer des pages entières, mais je ne connais pas votre projet, donc je peux me tromper.
Michael K
que pensez-vous de cette approche: stackoverflow.com/a/2540471/2615737 ? il semble raisonnable ...
Francisco Corrales Morales
Je ne pense pas que ce soit le même cas d'utilisation. Cette réponse concerne deux versions de la même application qui sont très légèrement différentes, tandis que cette question concerne ce que je considère comme des applications entièrement différentes. Je préférerais toujours ne pas avoir la branche du tout même dans le cas "légèrement différent"; cependant, il est difficile de factoriser la fonctionnalité pour séparer les bibliothèques dans Android s'il y a des vues xml impliquées. On dirait que ce répondeur ne pensait pas que cela valait la peine pour sa situation.
Michael K
6

Si les applications ne modifient pas la base elle-même, envisagez de laisser la base dans son propre référentiel. Créez ensuite un nouveau référentiel pour chacune des applications individuelles et ajoutez la base en tant que sous-module git .

jhenninger
la source