Странный конфликт на git

Я прочитал статью о трехсторонних слияниях (diff3). Это дает пример того, как обнаруживает конфликт. Пример:

A=[1,4,5,2,3,6]
O=[1,2,3,4,5,6] <<< Origin
B=[1,2,4,5,3,6]

В первый раз он вычисляет разницу между O-A и после OB:

A=[1,4,5,2,3,   ,6]
O=[1,   ,2,3,4,5,6] 

и

O=[1,2,3,4,5, ,6] 
B=[1,2, ,4,5,3,6]

После того, как он сделает diff3 parse:

A=[1,4,5,2,   3    ,6]
O=[1,   ,2, 3,4,5  ,6] <<< Origin
B=[1,   ,2, 4,5,3  ,6]

И после того, как он обнаружит конфликт:

1
4
5
2
<<<<<<<<<A
3
|||||||O
3
4
5
=======
4
5
3
>>>>>>B
6

Следуя этому методу для обнаружения конфликта, я пробую простой пример: изначально у меня есть документ:

a;
b;

я делаю обновление пользователя 1, обновление "a;", до "a=0;", обновление пользователя 2 "b;", до "b=0;", я получаю этот результат:

xx
<<<<<<< A
int a=0;
int b;
||||||| O
int a;
int b;
=======
int a;
int b=0;
>>>

Когда я объединяю эти два документа, у меня возникает конфликт, даже если я не меняю одну и ту же позицию (a and b are not at the same position)! кто-нибудь может объяснить мне, почему у меня этот конфликт?


person Mehdi    schedule 14.05.2013    source источник
comment
Являются ли записи для a; б; в документе на той же строке?   -  person Schleis    schedule 14.05.2013
comment
НЕТ нет на той же линии!   -  person Mehdi    schedule 14.05.2013
comment
если весь документ состоит всего из 3 строк, то, вероятно, просто недостаточно контекста для diff, чтобы правильно распознать неконфликтный случай. и если diff перепутан, это конфликт;)   -  person Nevik Rehnel    schedule 14.05.2013
comment
@NevikRehnel, я не думаю, что дело в размере документа. Диф не работает с размером дока, если две строки или 1000 то тоже самое. Я объясняю, как diff3 обнаруживает конфликт, и в его методе нет размера doc.   -  person Mehdi    schedule 14.05.2013
comment
Этот вопрос ошибочен по нескольким причинам: 1) он не ссылается на статью, 2) он не объясняет, как это связано с git, 3) он не объясняет четко, что означают числа (я предполагаю, что они относятся к номерам строк), 4) не дает шагов для воспроизведения проблемы. Пожалуйста, отредактируйте, и у вас будет больше шансов получить полезный ответ.   -  person Adam Spiers    schedule 18.05.2013
comment
@AdamSpiers нашел этот pdf-файл о diff3, в котором есть эти числа , может поможет?   -  person    schedule 25.05.2013


Ответы (1)


Этот вопрос очень похож на этот вопрос, и ответ также таков: это потому, что каждый фрагмент различий состоит не только из буквального различия, но также из некоторых строк контекста, которые необходимы для обнаружения различия в файле, в котором есть некоторые добавленные/удаленные строки, и, таким образом, меняется смещение фрагмента. Разница в контексте также является конфликтом, потому что в зависимости от того, какой патч вы применяете первым, вы меняете контекст для другого патча.

person sschuberth    schedule 27.05.2013