Предисловие: это не общий вопрос о конфликтах слияния, а очень конкретный случай, который продолжает прослушивать меня. Это довольно тривиально, но это сводится к (легкой) стычке, достаточно часто выделяющейся. Меня не волнует общее слияние, это всего лишь экономия нескольких секунд здесь и там для очень механического разрешения конфликтов, избегая упомянутого конфликта в первую очередь. Я также абсолютно понимаю, что это не «проблема с git» или что-то в этом роде.Как избежать конфликтов объединения при использовании разных методов (и т. Д.) В одном месте?
Это говорит, что у нас есть исходный файл класса:
class Xyz
...
...
def last_method
...
end
end
Это начинается тождественны в master
и несколько филиалов особенность. Теперь, когда мы реализуем наши возможности, мы добавим больше методов этого класса:
Branch 1:
class Xyz
...
...
def last_method
...
end
def new_method1
...
end
end
Branch 2:
class Xyz
...
...
def last_method
...
end
def new_method2
...
end
end
Новые методы не связаны и счастливо сосуществовать когда обе ветви сливаются обратно в master
.
Очевидно, что это приведет к конфликту слияния. Причина ясна - мы изменили исходный файл в точно таком же месте, и, очевидно, git не может (и не должен) волшебно решать для нас, что это не «реальный» конфликт; git должен был бы выбрать, какой из методов следует разместить первым и т. д.
Одним из способов избежать конфликта было бы вставить новые методы в разные места в файле (при условии, что порядок не имеет значения), но мы на самом деле не хотят тратить много сил (или вообще на всех), чтобы мысленно отслеживать, куда вставлять материал или что происходит в других функциях.
Вопрос: тогда есть другой способ, может быть, какое-то соглашение о кодировании, которое вы регулярно применяете, что каким-то образом избегает конфликта слияния?
Спасибо за ваш ответ, и я ценю, что вы упомянули «при определенных условиях». К сожалению, они не применяются - в моем случае это гибкое/BDD-ориентированное развитие, где мы делаем совершенно противоположное; то есть у нас нет неиспользуемого кода заполнителя или даже «todo» реализации пустых методов (по крайней мере, не в «master»). – AnoE
@Ekkehard Это все, что я могу придумать. Легко, как человек, видеть, что разные методы, добавленные разными участниками, не должны вызывать конфликт слияния, но из алгоритма diff3 недостаточно сложны, чтобы обнаружить это; насколько это известно, разные строки добавлены в том же месте => конфликт. – Jubobs