Istnieje faktycznie trzecia możliwość - i najprawdopodobniej mnóstwo innych, ponieważ GIT jest raczej implementacją środowiska SCM niż implementacją metodologii SCM. Ta trzecia możliwość oparta jest na rebase.
rebaseGIT Komenda wykonuje serię commit (zazwyczaj z punktu rozgałęzienia do czubka swojego tematu gałęzi topic) i odtworzyć je gdzieś indziej (zazwyczaj na końcu swojego oddziału integracyjnego, na przykład master). rebaseKomenda wytwarza nowe rewizje, które daje możliwość rozmieszczanie zobowiązuje się w formie, która jest łatwiejsza do przeglądu. Daje to nową serię zatwierdzeń, podobną do topicpoprzedniej, ale wyglądającą na zakorzenioną w górnej części gałęzi integracji. Ta nowa gałąź jest nadal wywoływana topicprzez GIT, więc stare odwołanie jest odrzucane. Nieformalnie nazywam topic-0pierwotny stan twojego oddziału topic-1i tak dalej na temat różnych refaktoryzacji.
Oto moja propozycja dla twojego topicoddziału:
(Opcjonalny etap) można interaktywnie rebase tematu oddział topicna jego punkcie rozgałęzienia (zobacz --fixupopcję commiti -ioraz --autosquashopcje rebase), co daje możliwość przepisać zobowiązuje w sposób, który jest łatwiejszy do przeglądu ci. To powoduje powstanie oddziału topic-1.
Bazujesz na gałęzi tematu u góry gałęzi integracji, przypomina to scalanie, ale „nie zanieczyszcza” historii łączeniem, które jest jedynie artefaktem inżynierii oprogramowania. To powoduje powstanie oddziału topic-2.
Wyślij topic-2do członka drużyny, który dokona przeglądu na końcu master.
Jeśli topic-2wszystko jest w porządku, połącz je w master.
UWAGA Gałęzie - gdzie gałąź odnosi się do drzewa zatwierdzeń - wszystkie będą nazywane przez GIT tak samo, więc pod koniec procesu tylko gałąź topic-2ma nazwę w GIT.
Plusy:
- Brak sprawdzonego kodu.
- Brak fałszywych recenzji „połączeń zagranicznych” (zjawisko opisane w 1).
- Możliwość przepisania zmian w czysty sposób.
Cons:
- Zamiast jednego oddziału
topic-0, nie ma trzy gałęzie artefakty topic-0, topic-1a topic-2które są tworzone w commit drzewo. (Chociaż w dowolnym momencie tylko jeden z nich ma nazwę w GIT.)
W twoim pierwszym scenariuszu «jeśli ktoś połączy coś między" 1 " a „2.” »oznacza czas między utworzeniem punktu rozgałęzienia a czasem, w którym zdecydujesz się połączyć. W tym scenariuszu «jeśli ktoś scalił coś między„ 1 ” a „2.” »oznacza czas między rebase a scaleniem, który zwykle jest bardzo krótki. Dlatego w przedstawionym przeze mnie scenariuszu można „zablokować” mastergałąź na czas scalania, nie zakłócając w sposób znaczący przepływu pracy, podczas gdy w pierwszym scenariuszu jest to niepraktyczne.
Jeśli przeprowadzasz systematyczne przeglądy kodu, prawdopodobnie dobrym pomysłem jest zmiana kolejności zatwierdzeń w odpowiedni sposób (krok opcjonalny).
Zarządzanie artefaktami gałęzi pośredniej stanowi trudność tylko wtedy, gdy dzielisz je między repozytoriami.