Verwalten mehrerer Versionen einer Webanwendung mit Git


12

Wir haben eine Familie von Apps, die alle dieselbe Basis haben. Bis jetzt habe ich diese Basis entwickelt und der Git-Workflow war sehr einfach:

  • Die Entwicklung erfolgt im developZweig
  • Neue Funktionen werden in der name-of-the-featureBranche entwickelt
  • Freigaben erfolgen in der release-**Filiale

Bisher war der Code für alle Apps der Familie gleich. Nehmen wir an, die gemeinsam genutzte Basis ist jetzt vollständig und der Code wird von nun an für jede App unterschiedlich sein.

Ich bin mir nicht sicher, wie ich mit Git und diesen mehreren Apps umgehen soll, die dieselbe Basis haben.

  • Sollte jeder von ihnen ein eigenes Git-Projekt haben ?
  • Sollten sie am selben Projekt beteiligt sein, aber jeder in seiner eigenen Niederlassung ?

Der Punkt ist: Wenn ich sie in separate Projekte lege, muss jede Änderung, die in der Basis der App vorgenommen wird, in jeder der Apps wiederholt werden. Ich bin nicht sehr vertraut mit Git , aber wenn ich jedes Projekt in einem Zweig speichere , wird es möglich sein, die Grundmodifikation mit jeder App zusammenzuführen?

Hat jemand eine solche Situation erlebt? Ich bin nicht sicher, wie ich vorgehen soll.

Vielen Dank!

BEARBEITET Als ich Version sagte, meinte ich nicht wie Versionsnummern. Es handelt sich tatsächlich um verschiedene Apps, die dieselbe Basis verwenden.

Antworten:


7

Belassen Sie die Basis-App in ihrem eigenen Repository und erstellen Sie neue Projekte, die von der JAR-Datei abhängen, die Sie aus diesem Repository kompilieren.

Git-Zweige sind nicht für mehrere Apps. Git bevorzugt, dass Sie ein Repository für jedes Projekt oder eine verwandte Projektfamilie verwenden. Es gibt Verzweigungen, mit denen Sie Features isoliert entwickeln können, und nicht, um ein völlig neues Projekt zu erstellen, ohne das Repository zu verlassen.

Sie möchten nicht, dass mehrere Apps Code gemeinsam nutzen - das ist ein Wartungs-Albtraum. Wenn Sie vorschlagen, dass Sie jede als Zweigstelle in Ihrem zentralen Repository entwickeln, werden Sie eine Menge Verschmelzungen haben, um die Änderungen an jede App weiterzugeben . Es ist viel einfacher, sich auf eine einzelne, separate Bibliothek zu verlassen und so etwas wie Apache Maven zu verwenden, um Projektabhängigkeiten zu ermitteln.


Ein Großteil des gemeinsam genutzten Codes ist GWT-Code (Ansichten, Dienste usw.). Ist es möglich, es in eine Glasbibliothek zu extrahieren? Oder ist es nur möglich, serverseitigen Java-Code zu verwenden?
João Daniel

Ansichtselemente können extrahiert werden, möglicherweise jedoch nicht in ein Glas. Beispielsweise kann Javascript von jeder Seite in eine einzelne Datei extrahiert werden, die dann in jedes Projekt aufgenommen werden kann. JSP-Common-Code sollte in JSP-Tags extrahiert werden. Sie müssen wahrscheinlich nicht ganze Seiten ziehen, aber ich kenne Ihr Projekt nicht, also könnte ich mich irren.
Michael K

Was halten Sie von diesem Ansatz: stackoverflow.com/a/2540471/2615737 ? es scheint vernünftig ...
Francisco Corrales Morales

Ich denke nicht, dass es der gleiche Anwendungsfall ist. Diese Antwort bezieht sich auf zwei Versionen derselben App, die sich geringfügig unterscheiden, während es sich bei dieser Frage um eine Frage handelt, die ich als völlig unterschiedliche Anwendungen betrachte. Ich würde es immer noch vorziehen, die Niederlassung überhaupt nicht zu haben, selbst in dem "etwas anderen" Fall; Es ist jedoch schwierig, die Funktionalität zum Trennen von Bibliotheken in Android herauszurechnen, wenn View-XMLs beteiligt sind. Sieht so aus, als hätte der Anrufbeantworter nicht gedacht, dass es die Mühe für seine Situation wert ist.
Michael K

6

Wenn die Apps die Basis selbst nicht ändern, sollten Sie die Basis in ihrem eigenen Repository belassen. Erstellen Sie dann für jede einzelne App ein neues Repository und fügen Sie die Basis als Git-Submodul hinzu .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.