Đây có phải là hành vi chỉ git?
Sau khi thảo luận với một đồng nghiệp, tôi mới thử và SVN xử lý nó mà không gặp vấn đề gì: bạn đã sửa đổi 2 dòng.
Các khả năng hợp nhất của một số VCS được thử nghiệm ở đây cho chợ, darcs, git và mercurial : https://github.com/mndrix/merge-this
Dường như chỉ có darcs hợp nhất thành công trường hợp "đường liền kề".
Áp dụng các thay đổi liền kề cho các tập tin không phải là một vấn đề khó khăn. Tôi thực sự nghĩ rằng hành vi này đã được chọn trên mục đích.
Tại sao một người nào đó quyết định rằng sửa đổi các đường liền kề sẽ tạo ra một cuộc xung đột?
Tôi sẽ nghĩ rằng đây là để buộc bạn nhìn vào nó .
int max = MAX_ITEMS;
for(unsigned int i = 0; i < max; i++)
do_stuff(i);
Modif số 1, trên 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 số 2, được sáp nhập từ một chi nhánh:
int max = MAX_ITEMS;
for(unsigned int i = 0; i < max/2; i++) // max/2: only on 1st half
do_stuff(i);
Sau khi hợp nhất, bạn không muốn điều đó:
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);
Xem hành vi này là một tính năng
Bạn có thể biến hành vi hợp nhất git thành một lợi thế. Khi bạn cần giữ 2 dòng nhất quán nhưng bạn không thể phát hiện ra nó (tại thời điểm biên dịch, sớm trong các thử nghiệm của bạn hoặc cách khác), bạn có thể thử tham gia chúng.
Viết lại ...:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
// Need to do something else
do_something_else(r);
... đến đây:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
do_something_else(r); // Need to do something else
Vì vậy, khi bạn hợp nhất 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
... với 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 sẽ tạo ra một cuộc xung đột và bạn sẽ buộc bạn phải nhìn vào nó.