Есть ли способ заставить git merge всегда использовать внешний инструмент слияния?
Есть ли способ настроить git merge таким образом, чтобы разрешение конфликтов всегда проходило через внешний инструмент слияния?
Я пишу конфигурацию для семантического сравнения, и есть случаи, подобные этому, которые некорректно обрабатываются git, но могут быть правильно решены с помощью semanticmerge: * два разработчика добавили один и тот же метод в двух разных местах одного и того же файла.
Проблема в том, что git merge говорит, что конфликт автоматический, поэтому git mergetool не может быть вызван.
Благодарю.
1 ответ
Смотрите документацию по gitattributes. Глубоко внизу находится атрибут с именем "слияние", который устанавливает метод слияния для сопоставления файлов.
Таким образом, например, вы могли бы иметь .gitattributes
файл в корне проекта, который содержит,
*.fancy merge filfre %O %A %B %L %P
который будет использовать filfre
Программа для слияния. Он вызывает программу с
- Имя временного файла версии предка%O
- % Имя текущей версии файла
- %B имя временного файла версии других веток
- %L размер маркера конфликта
- %P путь, в котором будет сохранен объединенный результат
Ожидается, что драйвер слияния перезапишет%A результатом слияния при слиянии.
В этой документации есть раздел, озаглавленный "Определение пользовательского драйвера слияния", в котором предлагается глобально настроить инструмент слияния.
[merge "filfre"]
name = feel-free merge driver
driver = filfre %O %A %B %L %P
recursive = binary
помещенный в вашу конфигурацию git, например, .git/config
или же $HOME/.gitconfig
,
Пожалуйста, проверьте git-scm book ( http://git-scm.com/book/en/Customizing-Git-Git-Configuration). Это имеет подробное объяснение внешних инструментов слияния и различий.