In realtà esiste una terza possibilità, e molto probabilmente molte altre, dal momento che GIT è più un'implementazione di un framework SCM che un'implementazione di una metodologia SCM. Questa terza possibilità è basata su rebase
.
Il sottocomando rebase
GIT prende una serie di commit (in genere dal punto di diramazione alla punta del ramo dell'argomento topic
) e li ripete da qualche altra parte (tipicamente sulla punta del tuo ramo di integrazione, ad esempio master
). Il sottocomando rebase
produce nuovi commit, che danno l'opportunità di riorganizzare i commit in una forma che è più facile da recensire. Questo produce una nuova serie di commit, simile a ciò che topic
era, ma che appariva radicata nella parte superiore del ramo di integrazione. Questo nuovo ramo è ancora chiamato topic
da GIT, quindi il vecchio riferimento viene scartato. Etichetta in modo informale topic-0
lo stato originale del tuo ramo e topic-1
e così via nei vari refactoring.
Ecco il mio suggerimento per il tuo ramo topic
:
-
(Passaggio facoltativo) Rebase in modo interattivo il tuo ramo dell'argomento topic
sul suo punto di diramazione (vedi l'opzione --fixup
per commit
e -i
e --autosquash
opzioni su rebase
), che ti dà l'opportunità di riscrivere i tuoi commit in un modo che è più facile da recensire. Ciò si traduce in un ramo topic-1
.
-
È possibile rebase il ramo dell'argomento nella parte superiore del ramo di integrazione, è simile a fare un'unione, ma la cronologia "non inquina" con un'unione che è semplicemente un artefatto di ingegneria del software. Ciò si traduce in un ramo topic-2
.
-
Invia topic-2
a un compagno di squadra che lo rivede in base al suggerimento di master
.
-
Se topic-2
va bene, uniscilo in master.
NOTA I rami - dove ramo si riferiscono all'albero di commit - saranno tutti chiamati lo stesso da GIT, quindi, alla fine del processo, solo il ramo topic-2
ha un nome in GIT.
Pro:
- Nessun codice obsoleto in revisione.
- Nessuna falsa "straniera fonde" recensioni (il fenomeno che hai descritto in 1a).
- Opportunità di riscrivere i commit in modo pulito.
Contro:
- Invece di un ramo
topic-0
, ci sono tre artefatti topic-0
, topic-1
e topic-2
che vengono creati nell'albero di commit. (Anche se in qualsiasi momento, solo uno di loro ha un nome in GIT.)
Nel tuo primo scenario «se qualcuno ha unito qualcosa tra" 1. " e "2." »si riferisce al tempo che passa tra la creazione del punto di diramazione e il momento in cui si decide di unire. In questo scenario «se qualcuno ha unito qualcosa tra" 1. " e "2." »si riferisce al tempo che si estende tra il rebase e l'unione, che di solito è molto breve. Pertanto, nello scenario che fornisco, puoi «bloccare» il ramo master
per il tempo dell'unione senza disturbare in modo significativo il tuo flusso di lavoro, mentre non è pratico nel primo scenario.
Se stai eseguendo revisioni sistematiche del codice, è probabilmente una buona idea riorganizzare i commit in modo adeguato (passaggio facoltativo).
La gestione degli artefatti del ramo intermedio presenta una difficoltà solo se li condividi tra repository.