这是仅git的行为吗?
与同事讨论之后,我尝试了一下,SVN可以毫无问题地处理它:您修改了两行。
在这里,针对集市,darcs,git和mercurial测试了多个VCS的合并功能:https : //github.com/mndrix/merge-this
似乎只有darcs成功地合并了“相邻行”的情况。
将相邻的更改应用于文件不是一个难题。我真的认为这种行为是故意选择的。
为什么有人会决定修改相邻线会产生冲突?
我认为这是要强迫您看一下。
int max = MAX_ITEMS;
for(unsigned int i = 0; i < max; i++)
do_stuff(i);
主模块上的Modif数字1:
int max = MAX_ITEMS/2; // Do stuff only on the first half
for(unsigned int i = 0; i < max; i++)
do_stuff(i);
Modif 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会产生冲突,您将迫使您查看它。