Це поведінка лише для git?
Після обговорення з колегою, я просто спробував, і SVN обробляє це без проблем: ви зміните 2 рядки.
Тут випробувані можливості злиття декількох VCS для базару, darcs, git та mercurial : https://github.com/mndrix/merge-this
Здається, лише дарки успішно зливають корпус "сусідніх ліній".
Застосування суміжних змін до файлів не є складною проблемою. Я дійсно думаю, що така поведінка була обрана цілеспрямовано.
Чому хтось вирішить, що зміна сусідніх ліній породжує конфлікт?
Я думаю, що це змусить вас поглянути на це .
int max = MAX_ITEMS;
for(unsigned int i = 0; i < max; i++)
do_stuff(i);
Модифікація № 1, на головний:
int max = MAX_ITEMS/2; // Do stuff only on the first half
for(unsigned int i = 0; i < max; i++)
do_stuff(i);
Модифікація №2, об'єднана з гілкою:
int max = MAX_ITEMS;
for(unsigned int i = 0; i < max/2; i++) // max/2: only on 1st half
do_stuff(i);
Після злиття вам цього не потрібно:
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);
Бачачи цю поведінку як особливість
Ви можете перетворити поведінку злиття git в перевагу. Якщо вам потрібно зберегти послідовність двох рядків, але ви не можете їх виявити (під час компіляції, на початку тестів чи інше), ви можете спробувати приєднатися до них.
Перепишіть це ...:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
// Need to do something else
do_something_else(r);
...до цього:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
do_something_else(r); // Need to do something else
Отже, коли ви об'єднуєте 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
... за допомогою 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 призведе до конфлікту, і ти змусиш тебе на це поглянути.