Как заставить Mercurial выдавать базовую версию конфликтующего файла, а также измененную версию? - PullRequest
4 голосов
/ 24 сентября 2010

Я пытаюсь объединить две ветви вместе с помощью Mercurial, и есть некоторые конфликты. При работе в Subversion конфликты слияния приводят к тому, что конфликтующий файл заменяется унифицированным diff, добавляется моя собственная версия файла с расширением «.mine», а также последняя проверенная версия файла с «.rxxx». "добавлено расширение.

С mercurial я получаю только унифицированный diff, а также свою собственную версию с добавленным расширением .orig.

Я привык самостоятельно редактировать слияния в Eclipse с помощью команды «Сравнить с> Другим» или с помощью FileMerge, однако, поскольку базовая ревизия недоступна без ручного выбора и извлечения, я не могу работать так больше.

Я не хочу выполнять слияние во время команды hg merge - я предпочитаю делать это в свое время.

Есть ли настройка или расширение, которые я могу использовать, чтобы сделать это возможным?

Ответы [ 4 ]

8 голосов
/ 30 сентября 2010

У нас есть встроенный инструмент для слияния, который называется internal:dump.Так что с

[ui]
merge = internal:dump

вы вернетесь в старые добрые времена Subversion или что-то близкое к этому.

3 голосов
/ 24 сентября 2010

Как насчет настройки инструмента слияния, который просто сохраняет файлы, создаваемые Mercurial для работы с инструментом слияния?

[ui]
merge = copy

[merge-tools]
copy.executable = /path/to/mycopy.sh
copy.args = $base $local $other $output

А затем в mycopy.sh просто выполните что-то вроде:

#!/bin/sh
cp $1 $4.base
cp $2 $4.mine
cp $3 $4.theirs

Это всегда должно происходить мгновенно и оставлять вам .base a .mine и .theirs для каждого конфликтующего файла.Вы можете установить это один раз в вашем ~/.hgrc и покончить с этим.

1 голос
/ 24 сентября 2010

Посмотрите на команду hg resolve.После начала слияния, но до его фиксации, вы можете использовать resolve для вывода списка файлов с конфликтами, а также помечать конфликты как разрешенные или нерешенные или перезапускать процесс слияния, причем все детализации отдельных файлов вместо изменений.

Он не дает вам нужные файлы (хотя смотрите ответ @ Ry4an), но может запустить ваши инструменты слияния для любого конкретного файла, когда вы захотите его разрешить.

0 голосов
/ 24 сентября 2010

Вы можете установить переменную окружения HGMERGE.

Mercurial обычно пытается сначала объединить файлы, используя простой алгоритм объединения, чтобы проверить, можно ли объединить их без конфликтов. Только если есть конфликтующие изменения, hg фактически выполнит программу слияния.

Вы можете установить это для некоторого инструмента слияния GUI и т. Д.

Существуют и другие параметры, такие как внутренний: сбой, внутренний: локальный или внутренний: другой

В hgrc:

[ui]
merge = your-merge-program

[merge-tools]
kdiff3.args = $base $local $other -o $output

Так что вы должны иметь возможность задавать аргументы программы слияния со всеми вашими потребностями. Вероятно, вы можете принять эту технику, чтобы «Затмение» было запущено.

Чтобы сделать слияние сразу же при конфликте, попробуйте

export HGMERGE=false

На самом деле, если вы хотите знать конфликт заранее, вы можете использовать опцию «Предварительный просмотр» для hg merge

-P --preview  review revisions to merge (no merge is performed)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...