При слиянии файлов Mercurial использует специальные инструменты.
Такой инструмент объединяет две различных версии файла в результирующую. Инструментом слияния является программа, которой передаются два файла и последний общий предок обеих версий, так что она может определить, какие изменения были были сделаны на каких ветках.
Инструменты используются командами 'hg resolve', 'hg merge', 'hg update', 'hg backout' и несколькими расширениями.
Обычно, программы слияния пытаются автоматически разрешить конфликты, объединяя непересекающиеся изменения, которые были сделаны в двух различных ветках истории файла. Более того, некоторые интерактивные инструменты слияния облегчают ручное разрешение конфликтов, используя графическое представление или вставляя особые маркеры. Mercurial не поставляется с интерактивными инструментами, полагаясь на внешние программы.
Внешние инструменты слияния и их свойства настраиваются в секции merge-tools конфигурационного файла (см 'hg help config'), но как правило можно просто указать имя их исполнимого файла.
Инструмент слияния может использоваться, если его исполняемый файл может быть найден системой, и если он может провести слияние. Исполняемый файл может быть найден, если он доступен по известным путям. Инструмент может провести слияние, если он корректно обрабатывает символические ссылки, в том случае если файл является символической ссылкой, обрабатывает бинарные файлы, если файл является бинарным, и если доступна графическая среда, в случае, если инструмент требует GUI.
Существуют также встроенные инструменты слияния:
This implies premerge. Therefore, files aren't dumped, if premerge runs successfully. Use :forcedump to forcibly write files out.
(actual capabilities: binary, symlink)
(actual capabilities: binary, symlink)
(actual capabilities: binary, symlink)
(actual capabilities: binary, symlink)
(actual capabilities: binary, symlink)
(actual capabilities: binary, symlink)
Internal tools are always available and do not require a GUI but will by default not handle symlinks or binary files. See next section for detail about "actual capabilities" described above.
Mercurial использует следующие правила при выбора программы слияния:
For historical reason, Mercurial treats merge tools as below while examining rules above.
step | specified via | binary | symlink |
1. | --tool | o/o | o/o |
2. | HGMERGE | o/o | o/o |
3. | merge-patterns | o/o(*) | x/?(*) |
4. | ui.merge | x/?(*) | x/?(*) |
Each capability column indicates Mercurial behavior for internal/external merge tools at examining each rule.
If "merge.strict-capability-check" configuration is true, Mercurial checks capabilities of merge tools strictly in (*) cases above (= each capability column becomes "?/?"). It is false by default for backward compatibility.
Примечание:
After selecting a merge program, Mercurial will by default attempt to merge the files using a simple merge algorithm first. Only if it doesn't succeed because of conflicting changes will Mercurial actually execute the merge program. Whether to use the simple merge algorithm first can be controlled by the premerge setting of the merge tool. Premerge is enabled by default unless the file is binary or a symlink.
Подробнее см. секции merge-tools и ui в 'hg help config' или man hgrc.