2013-05-14 2 views
5

Я прочитал статью о трехходовых слияниях (diff3). Он дает пример о том, как выявить конфликт. Пример:Странный конфликт на git

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

В первый раз он вычисляет различий между ОА и после OB:

и

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;" Я получаю это res ии:

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)! кто-то может объяснить мне, почему у меня этот конфликт?

+0

Записи для; б; в документе в той же строке? – Schleis

+0

НЕТ нет на той же линии! – Mehdi

+0

, если весь документ имеет длину всего 3 строки, тогда, вероятно, недостаточно контекста для diff, чтобы правильно распознать неконфликтный случай. и если diff запутан, это конфликт;) –

ответ

1

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

Смежные вопросы