Как получить слияние с 3 путями в МЕРЗАВЦЕ на слияниях неконфликта?

Как отключить автослияние в МЕРЗАВЦЕ?

Цель состоит в том, чтобы иметь то же поведение что касается разрешения слияний конфликта в автоматических слияниях во время вызова цепочки команды:

$ git fetch
$ git merge some_branch
$ git mergetool

Последняя команда приводит нас к слиянию с 3 путями файлов в случае конфликтов слияния. Я хотел бы иметь простой способ выполнить то же слияние с 3 путями на файлах без слияний конфликта.

Я не мог найти решение в Интернете, есть ли кто-либо?

Я имею некоторые обходные решения в виду, но это предпочло бы избегать его.

Заранее спасибо,

Aleks

5
задан Aleks Wrotor 25 June 2010 в 23:23
поделиться

2 ответа

Для изменений, которые были сделаны только на одной или другой стороне, вы можете предотвратить автоматическое слияние, отключив атрибут merge (см. gitattributes в разделе « Выполнение трехстороннего слияния »). Слияние, выполненное для имени пути, которое не имеет атрибута слияния (или для него установлено значение «двоичный»), оставит версию из текущей ветви в рабочем дереве и оставит запись индекса для имени пути в конфликтном состоянии.

Если вы хотите побудить всех работать таким образом, вы можете поместить его в файл .gitattributes и зафиксировать его. Если вы хотите сделать это только для себя, вы можете поместить его в незарегистрированные файлы .gitattributes или поместить в файл $ GIT_DIR / info / attributes своего репозитория (который можно добавить / удалить / переименовать по желанию, чтобы включить / отключить атрибут).

#    repository/.git/info/attributes
# OR
#    .gitattributes
* -merge

Если одинаковое изменение сделано с обеих сторон, даже эта конфигурация не вызовет конфликта.

6
ответ дан 13 December 2019 в 19:21
поделиться

Хитрость в том, способ, которым git решает слияние :

  • всегда основан на трехстороннем слиянии (поскольку граф коммитов позволяет получить общего предка очень легко)
  • всегда без проблем, за исключением конфликта (когда вы помогаете процессу)

Таким образом, даже если вы определите драйвер слияния , он не сработает, если не возникнет конфликт какая-то.


Первый параметр, который нужно попробовать, - это определить атрибут слияния Не задан

Не задан

Взять версию из текущей ветви в качестве предварительного результата слияния и объявить, что слияние имеет конфликты . Это подходит для двоичных файлов, которые не имеют четко определенной семантики слияния.

Вы должны написать .gitattributes файл

 * -merge

и посмотреть, достаточно ли этого для запуска mergetool для всех объединенных файлов.


Одна из причин, по которой эта "отключенная" функция не является напрямую опцией git merge , заключается в том, что:

  • merge - это основная функция слияния DVCS
  • , выполняется в уровень дерева (учитывая весь проект)

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

5
ответ дан 13 December 2019 в 19:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: