Ist das nur Schwachsinn?
Nach einem Gespräch mit einem Kollegen habe ich es gerade versucht, und SVN behandelt es problemlos: Sie erhalten die 2 Zeilen geändert.
Die Zusammenführungsfähigkeiten mehrerer VCS werden hier für Basar, Darcs, Git und Mercurial getestet : https://github.com/mndrix/merge-this
Es scheint, dass nur Darcs den Fall "benachbarter Linien" erfolgreich zusammenführen.
Das Anwenden benachbarter Änderungen auf Dateien ist kein schwieriges Problem. Ich denke wirklich, dass dieses Verhalten absichtlich gewählt wurde.
Warum sollte jemand entscheiden, dass das Ändern benachbarter Zeilen zu einem Konflikt führt?
Ich würde denken, das soll dich zwingen, es dir anzusehen .
int max = MAX_ITEMS;
for(unsigned int i = 0; i < max; i++)
do_stuff(i);
Modif Nummer 1 am 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 Nummer 2, aus einem Zweig zusammengeführt:
int max = MAX_ITEMS;
for(unsigned int i = 0; i < max/2; i++) // max/2: only on 1st half
do_stuff(i);
Nach dem Zusammenführen möchten Sie das nicht:
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);
Dieses Verhalten als Feature betrachten
Sie können das Zusammenführungsverhalten von Git zu einem Vorteil machen. Wenn Sie zwei Zeilen konsistent halten müssen, dies aber nicht erkennen können (zum Zeitpunkt der Kompilierung, zu Beginn Ihrer Tests oder ansonsten), können Sie versuchen, sie zusammenzufügen.
Schreiben Sie dies neu ...:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
// Need to do something else
do_something_else(r);
... dazu:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
do_something_else(r); // Need to do something else
Wenn Sie also Modif 1 zusammenführen ...:
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
... mit 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 erzeugt einen Konflikt und du wirst dich zwingen, ihn anzuschauen.