Инструменты для слияния
При слиянии файлов Mercurial использует специальные инструменты.
Такой инструмент объединяет две различных версии файла в результирующую.
Инструментом слияния является программа, которой передаются два файла
и последний общий предок обеих версий, так что она может определить,
какие изменения были были сделаны на каких ветках.
Инструменты используются командами "hg resolve", "hg merge", "hg update",
"hg backout" и несколькими расширениями.
Обычно, программы слияния пытаются автоматически разрешить конфликты,
объединяя непересекающиеся изменения, которые были сделаны в двух
различных ветках истории файла. Более того, некоторые интерактивные
инструменты слияния облегчают ручное разрешение конфликтов, используя
графическое представление или вставляя особые маркеры. Mercurial
не поставляется с интерактивными инструментами, полагаясь на внешние
программы.
Доступные инструменты слияния
Внешние инструменты слияния и их свойства настраиваются в секции
merge-tools конфигурационного файла (см "hg help config"), но как
правило можно просто указать имя их исполнимого файла.
Инструмент слияния может использоваться, если его исполняемый файл
может быть найден системой, и если он может провести слияние.
Исполняемый файл может быть найден, если он доступен по известным
путям. Инструмент может провести слияние, если он корректно
обрабатывает символические ссылки, в том случае если файл является
символической ссылкой, обрабатывает бинарные файлы, если файл
является бинарным, и если доступна графическая среда, в случае,
если инструмент требует GUI.
Существуют также встроенные инструменты слияния:
- "internal:dump"
- Создает три версии файла для слияния: локальную, из хранилища и базовую. Эти файлы можно использовать для слияния вручную. Если файл называется "a.txt", то эти файлы будут называться "a.txt.local", "a.txt.other" и "a.txt.base" соответственно и будут находиться в том же каталоге, что и "a.txt".
- "internal:fail"
- Вместо того, чтобы попытаться провести слияние файлов, измененных на обеих ветках, он помечает их как файлы с неразрешенными конфликтами. После разрешения конфликта должна быть использована команда resolve.
- "internal:local"
- Использует локальные версии файлов в качестве результата слияния.
- "internal:merge"
- Использует внутренний неинтерактивный простой алгоритм слияния. Завершиться с ошибкой, если обнаружит конфликт, и оставит специальные маркеры в частично слитом файле.
- "internal:other"
- Использует версию файла из хранилища в качестве результат слияния.
- "internal:prompt"
- Спрашивает пользователя, какую версию файла - локальную или из хранилища - использовать в качестве слитой версии.
- "internal:tagmerge"
- Использует внутренний алгоритм слияния меток (экспериментальный).
Встроенные инструменты доступны всегда и не требуют графической среды,
но они по умолчанию не обрабатывают символьные ссылки и бинарные
файлы.
Выбор инструмента слияния
Mercurial использует следующие правила при выбора программы слияния:
- Если инструмент был задан с помощью опции --tool, то используется он. Если это имя инструмента из секции merge-tools, используются настройки оттуда. В противном случае, заданный инструмент должен быть пригодным для запуска командной оболочкой.
- Если переменная окружения "HGMERGE" установлена, используется ее значение, оно должно быть исполняемо оболочкой.
- Если имя сливаемого файла совпадает с любым шаблоном из секции merge-patterns, используется первый соответствующий шаблону инструмент слияния. При этом не учитываются возможности этого инструмента для слияния двоичных файлов.
- Если ui.merge установлен, он рассматривается следующим. Если значение не является именем сконфигурированного инструмента, используется указанное значение, которое должно быть исполнимо командной оболочкой. В противном случае по возможности используется заданный инструмент.
- Если в секции merge-tools присутствуют любые подходящие инструменты слияния, используется инструмент с максимальным приоритетом.
- Если программа "hgmerge" может быть найдена в системе, она будет использована, но по умолчанию она не будет использоваться для символьных ссылок и бинарных файлов по умолчанию.
- Если сливаемый файл не является символьной ссылкой или бинарным файлом, используется "internal:merge".
- Слияние завершается неудачей и должно быть завершено с помощью resolve перед фиксацией.
Примечание:
После выбора программы слияния, Mercurial по умолчанию пытается
слить файлы, используя простой алгоритм. Инструмент слияния будет
запущен, только если это не удастся из-за возникших конфликтов.
Решение о том, использовать или нет простой алгоритм слияния может
быть проконтролировано настройкой premerge инструмента слияния.
По умолчанию оно включено и используется, если сливаемый файл
не является бинарным или символьной ссылкой.
Подробнее см. секции merge-tools и ui в "hg help config" или
man hgrc.