Apakah ini hanya perilaku git?
Setelah berdiskusi dengan seorang kolega, saya baru mencoba, dan SVN menanganinya tanpa masalah: Anda mendapatkan 2 baris yang dimodifikasi.
Kemampuan gabungan dari beberapa VCS diuji di sini untuk bazaar, darcs, git, dan lincah : https://github.com/mndrix/merge-this
Tampaknya hanya darcs yang berhasil menggabungkan kasus "garis yang berbatasan".
Menerapkan perubahan yang berdekatan ke file bukanlah masalah yang sulit. Saya benar-benar berpikir perilaku ini telah dipilih dengan sengaja.
Mengapa seseorang memutuskan bahwa memodifikasi garis yang berdekatan menghasilkan konflik?
Saya akan berpikir ini untuk memaksa Anda melihatnya .
int max = MAX_ITEMS;
for(unsigned int i = 0; i < max; i++)
do_stuff(i);
Modif nomor 1, pada 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 nomor 2, digabung dari cabang:
int max = MAX_ITEMS;
for(unsigned int i = 0; i < max/2; i++) // max/2: only on 1st half
do_stuff(i);
Setelah bergabung, Anda tidak menginginkan itu:
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);
Melihat perilaku ini sebagai fitur
Anda dapat mengubah perilaku penggabungan git menjadi keuntungan. Ketika Anda perlu menjaga 2 baris konsisten tetapi Anda tidak dapat mendeteksinya (pada waktu kompilasi, di awal tes Anda atau yang lain), Anda dapat mencoba untuk bergabung dengannya.
Tulis ulang ini ...:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
// Need to do something else
do_something_else(r);
...untuk ini:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
do_something_else(r); // Need to do something else
Jadi ketika Anda menggabungkan 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
... dengan 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 akan menghasilkan konflik, dan Anda akan memaksa Anda untuk melihatnya.