Non sono sicuro di potermi fidare di Git per unire automaticamente. Ecco uno scenario.Come posso fidarmi di Git merge?
Creare un programma nel master:
MOVE 0 TO I.
A.
PERFORM X-PROC.
IF I IS EQUAL TO 25 THEN GO TO A.
Developer 1 fa un ramo e si accorge che c'è un bug: un ciclo infinito. Ha la fissa:
MOVE 0 TO I.
A.
ADD 1 TO I.
PERFORM X-PROC.
IF I IS EQUAL TO 25 THEN GO TO A.
Intanto Developer 2 fa un ramo e corregge il bug a modo suo:
MOVE 0 TO I.
A.
PERFORM X-PROC.
ADD 1 TO I.
IF I IS EQUAL TO 25 THEN GO TO A.
Entrambi gli sviluppatori di testare il proprio codice e lo trovano corretto. Entrambi si fondono con il master:
MOVE 0 TO I.
A.
ADD 1 TO I.
PERFORM X-PROC.
ADD 1 TO I.
IF I IS EQUAL TO 25 THEN GO TO A.
Il ciclo infinito è tornato.
Mi sembra che questo problema si verifichi spesso in qualsiasi tipo di ambiente di sviluppo distribuito. Quando ho provato questo, Git non ha segnalato un conflitto di fusione. A volte questo problema potrebbe non essere rilevato per molto tempo. Un test di regressione dovrebbe trovarlo, ma i test di regressione sono uniti anche in Git, quindi non possiamo fidarci neanche di loro.
Cosa posso fare a riguardo? Devo fare una lettura del codice dopo ogni unione?
Test suite/test di unità sono uno strumento meraviglioso per ridurre il carico di lavoro se si hanno fusioni gigantesche (che di solito non si hanno) - ma non cadere nel falso senso di sicurezza e negligenza mentale - controllare le proprie fusioni, solo perché i tuoi test passano tutti! –
Una tecnica che utilizzo per verificare una fusione meno dolorosa consiste nel prendere il diff di un ramo prima e dopo un'unione con un altro ramo, quindi confrontare tale diff (utilizzando un programma diff.) Al diff delle modifiche apportate nel altro ramo. Se non c'è differenza tra i diff, allora posso avere maggiore fiducia che l'unione non sia stata pasticciata. –
Grazie NevikRehnel e @cupcake - Mi piacerebbe o sentirò le strategie di tutti per il controllo della sanità mentale che si fondono! –