Questo comportamento è solo git?
Dopo una discussione con un collega, ho appena provato, e SVN lo gestisce senza problemi: ottieni le 2 righe modificate.
Le funzionalità di unione di diversi VCS sono testate qui per bazar, darc, git e mercurial : https://github.com/mndrix/merge-this
Sembra che solo i darc abbiano unito con successo il caso "linee adiacenti".
L'applicazione di modifiche adiacenti ai file non è un problema difficile. Penso davvero che questo comportamento sia stato scelto apposta.
Perché qualcuno dovrebbe decidere che la modifica delle linee 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, sul 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);
Vedendo questo comportamento come una caratteristica
È possibile trasformare il comportamento di fusione git in un vantaggio. Quando è necessario mantenere coerenti 2 righe ma non è possibile rilevarle (al momento della compilazione, all'inizio dei test o altro), è possibile provare a unirsi a esse.
Riscrivi questo ...:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
// Need to do something else
do_something_else(r);
...a questa:
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 costringerai a guardarlo.