Zarządzanie wieloma wersjami aplikacji internetowej za pomocą Git

12

Mamy rodzinę aplikacji, z których wszystkie mają tę samą bazę. Do tej pory rozwijałem tę bazę, a przepływ pracy w Git był bardzo prosty:

  • Rozwój odbywa się w developoddziale
  • Nowe funkcje są rozwijane w name-of-the-featurebranży
  • Wydawnictwa dokonywane są w release-**oddziale

Do tej pory kod był taki sam dla każdej aplikacji rodziny. Powiedzmy, że podstawa, którą dzielą, jest już ukończona i od tej pory kod będzie różny dla każdej aplikacji.

Nie jestem pewien, jak mam postępować z git i wieloma aplikacjami, które mają tę samą bazę.

  • Czy każdy z nich powinien mieć własny projekt git ?
  • Czy powinni oni realizować ten sam projekt, ale każdy w swoim oddziale ?

Chodzi o to: jeśli umieszczę je w osobnych projektach, każda modyfikacja dokonana w bazie aplikacji będzie musiała zostać powtórzona w każdej z aplikacji. Nie znam się dobrze na git , ale jeśli przechowuję każdy projekt w oddziale , czy będzie możliwe scalenie podstawowej modyfikacji z każdą aplikacją?

Czy ktoś doświadczył takiej sytuacji? Nie jestem pewien, jak postępować.

Dzięki!

ZMIENIONO Kiedy mówiłem wersję , nie miałem na myśli numerów wersji. W rzeczywistości są to różne aplikacje, które mają tę samą bazę.

João Daniel
źródło

Odpowiedzi:

7

Pozostaw aplikację podstawową we własnym repozytorium i twórz nowe projekty, które zależą od słoika skompilowanego z tego repozytorium.

Oddziały Git nie są przeznaczone dla wielu aplikacji. Git woli używać jednego repozytorium dla każdego projektu lub powiązanej rodziny projektów. Istnieją gałęzie, dzięki którym można rozwijać funkcje w izolacji, a nie tworzyć całkowicie nowy projekt bez opuszczania repozytorium.

Nie chcesz mieć wielu aplikacji, które współużytkują kod - to koszmar konserwacji. Jeśli sugerujesz, aby rozwinąć każdy z nich jako gałąź w centralnym repozytorium, będziesz musiał wiele scalić, aby propagować zmiany w każdej aplikacji. O wiele łatwiej jest polegać na jednej, osobnej bibliotece i używać czegoś takiego jak Apache Maven, aby pobierać zależności projektu.

Michael K.
źródło
Znaczna część udostępnianego kodu to kod GWT (widoki, usługi itp.). Czy można wyodrębnić go do biblioteki jar? A może kod Java jest po prostu dostępny na serwerze?
João Daniel
Wyświetl elementy można wyodrębnić, ale prawdopodobnie nie do słoika. Na przykład javascript można wyodrębnić z każdej strony do jednego pliku, który można następnie dołączyć do każdego projektu. Wspólny kod JSP należy wyodrębnić do tagów JSP. Prawdopodobnie nie musisz wyciągać całych stron, ale nie znam twojego projektu, więc mogłem się mylić.
Michael K
co sądzisz o tym podejściu: stackoverflow.com/a/2540471/2615737 ? wydaje się rozsądne ...
Francisco Corrales Morales
Nie sądzę, że to ten sam przypadek użycia. Ta odpowiedź dotyczy dwóch wersji tej samej aplikacji, które różnią się nieznacznie, podczas gdy to pytanie dotyczy całkowicie tego, co postrzegam jako różne aplikacje. Wciąż wolałbym nie mieć gałęzi, nawet w „nieco innym” przypadku; jednak trudno jest rozdzielić funkcjonalność na oddzielne biblioteki w Androidzie, jeśli w grę wchodzą jakieś pliki XML widoku. Wygląda na to, że ten odpowiadający nie uważał, że warto było zaryzykować jego sytuację.
Michael K
6

Jeśli aplikacje nie zmodyfikują samej bazy, rozważ pozostawienie bazy we własnym repozytorium. Następnie utwórz nowe repozytorium dla każdej aplikacji i dodaj bazę jako podmoduł git .

jhenninger
źródło