2012-01-26 21 views
6

Mamy następującą konfigurację: trzy aplikacje, które są podobne do siebie ze wspólnym kodem wyodrębnione w ramach. Każda aplikacja jest zarządzany we własnym repozytorium git i zawiera ramy jako modułem git.Git przepływu pracy dla różnych wersji ram

Problemem jest to, że aplikacje są obecnie rozwijane równolegle z nowych funkcji dodawanych do ram, że inne aplikacje nie muszą obsługiwać od razu. Obecnie mamy różne gałęzie struktury dla wszystkich aplikacji. Jedna aplikacja korzysta z głównej gałęzi frameworka, ponieważ większość nowych funkcji została po raz pierwszy wprowadzona w tej aplikacji.

ramowe gałęzie

  • master (używany przez App A)
  • appB
  • appc

Kiedy nowa funkcja zostanie wprowadzona w appB że potrzebne zmiany w ramach zmiany te wykonane do oddziału appB. Jeśli te zmiany były później potrzebne w App A, aplikacja branchB została scalona w master. Oznacza to, że wszystkie zmiany w appB musiały zostać połączone w master.

ten system działał, ale miał pewne wady

  • łączenia funkcji z jednego oddziału do drugiego oznaczało musieliśmy scalić wszystkie zmiany
  • łatwo stracić śledzić, co zostało połączone już ani co zamierza zostać połączone podczas scalania jednego oddziału do innego
  • zaznaczania zmian łamiącym została wykonana przy użyciu popełnić wiadomości, które sprawiły, że ostatni punkt nawet ważniejszą

Jesteśmy cu Rrently szuka nowego przepływu pracy. I było myśleć o następujących branżach

  • mistrza
  • Appa
  • appB
  • appc

Więc dla każdej aplikacji jednej gałęzi i oddział główny, który zawiera wszystkie zmiany. Kiedy nowe funkcje zostały opracowane oddział funkcja powinna zostać utworzona, a następnie zastosowane do opanowania, jak również do wszystkich gałęzi aplikacji funkcja jest potrzebne od razu. Inne aplikacje mogą łączyć gałąź funkcji, gdy będą jej później potrzebować.

widzę następujące problemy z tym

  • W jaki sposób można scalić gałąź funkcji na wielu oddziałach i tylko scalić zmiany, które miały miejsce w branży. Znam „git rebase na ...”, ale nie jestem pewien, czy mogę użyć tego polecenia wielokrotnie.
  • Czy należy używać git cherry-pick do łączenia funkcji w wiele oddziałów? Wolałbym tego nie robić, ponieważ sądzę, że będzie to podatne na błędy, gdy nie wybierzesz wszystkich zmian wprowadzonych w gałęzi funkcji.
  • Jak śledzić, która funkcja (gałąź) została zastosowana w danej aplikacji. Czy mogę używać oddział --no-seryjnej czy będzie to działać tylko wtedy, gdy oddziały mają tę samą przodka?

Czy mój sposób jest najlepszym sposobem na osiągnięcie tego celu, czy powinienem całkowicie przemyśleć moją strategię?

+2

Witam, Silver, czy możesz zaktualizować te pytania w przepływie pracy, który wprowadziłeś i jak działa. Mam do czynienia z tą samą sytuacją i też się mylę. Dlatego jestem zainteresowany tym, co zrobiłeś. – BlinkyBill

Odpowiedz

0

Jak wyjaśnia w „Git & Working on multiple branches”, dwa praktyczne rozwiązania przy stosowaniu zobowiązuje się do wielu gałęzi (czyli to, co chcesz zrobić z opcją „Funkcja oddziałów”) są:

  • seryjnej (który należy odczekać aby nadal używać tej gałęzi funkcji, ponieważ śledziłaby to, co już zostało scalone z konkretnym banchem): może być, abyś ponownie zamówił zatwierdzenia, najpierw wstawiając te, które chcesz scalić, a następnie te, których nie jesteś jeszcze gotowy, aby się połączyć.
  • cherry-picking (i teraz supports a range of commits), ale zawsze have been wary of cherry-picking.
+0

rebase --interactive wydaje się być dobrym narzędziem do tego. Czy są jakieś implikacje, których potrzebuję, aby być świadomym, kiedy go używam? – sliver

+0

@subver: tylko, że nie powinieneś zmieniać nazwy oddziału, który już uczestniczysz (przeniesiony do innego repozytorium) z innymi osobami (jak to opisano w http://stackoverflow.com/a/2825924/6309). W twoim przypadku nie powinno to stanowić problemu. – VonC

Powiązane problemy