Есть ли способ заставить 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). Это имеет подробное объяснение внешних инструментов слияния и различий.

Другие вопросы по тегам