Questo comportamento git-only?
Dopo aver discusso con un collega, ho appena provato e SVN lo gestisce senza problemi: ottieni le 2 linee modificate.
Le funzionalità di fusione di diversi VCS sono testate qui per bazaar, darcs, git e mercurial : link
Sembra che solo gli darcs uniscano il caso "linee adiacenti".
L'applicazione di modifiche adiacenti ai file non è un problema difficile.
Penso davvero che questo comportamento sia stato scelto appositamente.
Perché qualcuno dovrebbe decidere che la modifica delle righe adiacenti produce un conflitto?
Penso che questo sia per costringerti a guardarlo .
int max = MAX_ITEMS;
for(unsigned int i = 0; i < max; i++)
do_stuff(i);
Modif numero 1, su master:
int max = MAX_ITEMS/2; // Do stuff only on the first half
for(unsigned int i = 0; i < max; i++)
do_stuff(i);
Modif numero 2, unito da un ramo:
int max = MAX_ITEMS;
for(unsigned int i = 0; i < max/2; i++) // max/2: only on 1st half
do_stuff(i);
Dopo l'unione, non vuoi che:
int max = MAX_ITEMS/2; // Do stuff only on the first half
for(unsigned int i = 0; i < max/2; i++) // max/2: only on 1st half
do_stuff(i);
Visualizzazione di questo comportamento come funzione
È possibile trasformare il comportamento di fusione git in un vantaggio.
Quando devi mantenere 2 linee coerenti ma non riesci a rilevarle (al momento della compilazione, all'inizio dei test o altro), puoi provare a unirti a loro.
Riscrivi questo ...:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
// Need to do something else
do_something_else(r);
... a questo:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
do_something_else(r); // Need to do something else
Quindi quando unisci Modif 1 ...:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i)/2; // we need only the half
do_something_else(r); // Need to do something else
... con Modif 2 ...:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
if(r < 0) // do_stuff can return an error
handle_error(r);
do_something_else(r/2); // Need to do something else
..., git produrrà un conflitto e ti costringerà a guardarlo.