2016-10-24 6 views
0

Мы работаем с 3 «главными» ветками, dev, uat и master. Затем мы используем ветви «feature» для любых новых работ, разветвляясь от master, затем слияние обратно dev, PR до uat, master.Понимание причин конфликта Git

Во время PR до uat, один из них, в частности, видит почти постоянный конфликты слияния при сгенерированном CSS (мы используем SASS и gulp).

Хотя это звучит неожиданно, что дифференциалы довольно удивительно:

+<<<<<<< destination:ac815dd… 
.strip--beta .card-feed { 
    background: transparent; 
} 
+======= 
+>>>>>>> source:b49e50b72ee… 

или:

@media (min-width: 1024px) { 
+<<<<<<< destination:ac815ddf3… 
    .copy h1 { 
Add a comment to this line 
+======= 
+ .copy > h1 { 
+>>>>>>> source:b49e50b72… 
    font-size: 34px; 
    line-height: 48px; 
    } 

Я не понимаю, почему простое удаление, пара линий, или просто > вызовет конфликт.

Первоначально мы думали, что смотреть на окончаниях строк и т.д., но это генерируется ...

Как мы исследуем причину? Кто-нибудь знает, почему это происходит?

+3

Почему у вас есть сгенерированные файлы css в исходном управлении в первую очередь? Они строят артефакты и не принадлежат к ним. – 1615903

+0

И что они сгенерированы, не означает, что у вас есть проблема с окончанием строки. У вас могут быть разные конфигурации завершения строк в разных средах разработчиков. Вы должны использовать двоичный diff. –

+0

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

ответ

3

У меня есть причины добавить сгенерированный CSS в git, поэтому я проигнорирую эту проблему здесь.

Я не понимаю, почему простое удаление, из нескольких строк или просто> приведет к конфликту.

Но это именно те конфликты. Гит не волнует, насколько серьезны перемены. Вы можете дать ему указание игнорировать некоторые изменения в пробелах, но не рассматривать несколько строк как один.

3-полосная слияние двух коммитов А и Б работает следующим образом:

  • Найти общий предок C.
  • Найти изменений между C и A.
  • Найти изменений между C и B.
  • Сравните два набора разностей, а не по очереди, но по одному. Любые перекрывающиеся куски, где перекрывающиеся линии не равны (возможно, после нормализации пробелов), являются, по определению, конфликтами.

Я думаю, что реальный вопрос, который вам нужно решить, - это почему, если все остальное - то же, созданный CSS отличается для этого разработчика чем другой. Может быть, он использует разные (версии) инструменты для создания этого CSS, а инструменты (информация о версии) находятся за пределами репозитория?

+0

Хотя мы так и не дошли до конца, я подозреваю, что проблема была разработчиком ... Я отмечаю это правильно, так как дает полезное объяснение трехстороннего слияния. – mediaashley