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
.
rebase
GIT 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
). rebase
Komenda 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 topic
poprzedniej, ale wyglądającą na zakorzenioną w górnej części gałęzi integracji. Ta nowa gałąź jest nadal wywoływana topic
przez GIT, więc stare odwołanie jest odrzucane. Nieformalnie nazywam topic-0
pierwotny stan twojego oddziału topic-1
i tak dalej na temat różnych refaktoryzacji.
Oto moja propozycja dla twojego topic
oddziału:
(Opcjonalny etap) można interaktywnie rebase tematu oddział topic
na jego punkcie rozgałęzienia (zobacz --fixup
opcję commit
i -i
oraz --autosquash
opcje 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-2
do członka drużyny, który dokona przeglądu na końcu master
.
Jeśli topic-2
wszystko 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-2
ma 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-1
a topic-2
któ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ć” master
gałąź 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.