Как отключить автослияние в МЕРЗАВЦЕ?
Цель состоит в том, чтобы иметь то же поведение что касается разрешения слияний конфликта в автоматических слияниях во время вызова цепочки команды:
$ git fetch
$ git merge some_branch
$ git mergetool
Последняя команда приводит нас к слиянию с 3 путями файлов в случае конфликтов слияния. Я хотел бы иметь простой способ выполнить то же слияние с 3 путями на файлах без слияний конфликта.
Я не мог найти решение в Интернете, есть ли кто-либо?
Я имею некоторые обходные решения в виду, но это предпочло бы избегать его.
Заранее спасибо,
Aleks
Для изменений, которые были сделаны только на одной или другой стороне, вы можете предотвратить автоматическое слияние, отключив атрибут merge
(см. gitattributes в разделе « Выполнение трехстороннего слияния »). Слияние, выполненное для имени пути, которое не имеет атрибута слияния (или для него установлено значение «двоичный»), оставит версию из текущей ветви в рабочем дереве и оставит запись индекса для имени пути в конфликтном состоянии.
Если вы хотите побудить всех работать таким образом, вы можете поместить его в файл .gitattributes
и зафиксировать его. Если вы хотите сделать это только для себя, вы можете поместить его в незарегистрированные файлы .gitattributes
или поместить в файл $ GIT_DIR / info / attributes
своего репозитория (который можно добавить / удалить / переименовать по желанию, чтобы включить / отключить атрибут).
# repository/.git/info/attributes
# OR
# .gitattributes
* -merge
Если одинаковое изменение сделано с обеих сторон, даже эта конфигурация не вызовет конфликта.
Хитрость в том, способ, которым git решает слияние :
Таким образом, даже если вы определите драйвер слияния , он не сработает, если не возникнет конфликт какая-то.
Первый параметр, который нужно попробовать, - это определить атрибут слияния Не задан
Не задан
Взять версию из текущей ветви в качестве предварительного результата слияния и объявить, что слияние имеет конфликты . Это подходит для двоичных файлов, которые не имеют четко определенной семантики слияния.
Вы должны написать .gitattributes
файл
* -merge
и посмотреть, достаточно ли этого для запуска mergetool для всех объединенных файлов.
Одна из причин, по которой эта "отключенная" функция не является напрямую опцией git merge
, заключается в том, что:
Попытка отключить 3-стороннее слияние на уровне файла не является частью этого процесса слияния (что, опять же, является причиной на уровне дерева).
Поэтому он больше подходит как атрибут, который можно установить для определенного набора файлов.