Подтвердить что ты не робот

Как проверить потенциальные конфликты слияния/переадресации в Mercurial?

Есть ли простой способ проверить, приведет ли слияние/переустановка к конфликтам файлов, фактически не выполнив слияние /rebase?

Я хочу решить, следует ли:

  • rebase, если затронутый набор файлов (мой против их) различен
  • merge, если мы возились с одними и теми же файлами.

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

(Невозможно всегда проверять все заранее, так как у нас нет полностью полного набора тестов.).

И.. Я запускаю Windows.:)

4b9b3361

Ответ 1

Итак, с некоторой помощью от Martin ответ, я придумал расширение rebaseif, которое делает то, что я хочу.

По существу, он пытается переустановить с помощью инструмента внутреннего слияния, если это не удается (что он делает для любого конфликта), он прерывает и выполняет слияние с предпочтительным инструментом пользователя.

Подробнее см. https://bitbucket.org/marcusl/ml-hgext/src/tip/rebaseif.py.

Обновление

В последние месяцы я вернулся, чтобы просто слить, поскольку он по своей сути безопасен. Неконфликтная перебаза может все еще затуманиваться, поскольку зависимые файлы могут повлиять на изменение. (т.е. rebase теряет информацию о том, как выглядел код перед слиянием).

Как автор rebaseif, я рекомендую вместо этого использовать обычное старое слияние.:)

Ответ 2

Нет причин использовать hg merge, если изменения перекрываются и hg rebase иначе, так как hg rebase делает слияние внутри и разрешает его разрешать с использованием тех же инструментов, что и hg merge.

Что касается тестирования, если слияние или переадресация вызовет конфликты, вы можете использовать

$ hg merge --tool internal:merge

в Mercurial 1.7, чтобы переопределить вашу обычную конфигурацию слияния. (Часть --tool internal:merge является новой, используйте --config ui.merge=internal:merge в более ранних версиях Mercurial.)

После слияния

$ hg resolve --list

сообщит вам результаты, и вы вернетесь туда, где вы начали с

$ hg update --clean .

Ответ 3

Вы можете увидеть, что два набора изменений REV1 и REV2 влияют на любой из тех же файлов, что-то вроде:

(hg status --change REV1 --no-status ; hg status --change REV2 --no-status) | sort | uniq --repeated

Если у него есть какой-либо вывод, то тот же файл затрагивается в обеих версиях.

Это можно легко сделать оболочкой script как:

#!/bin/sh
(hg status --change $1 --no-status ; hg status --change $2 --no-status) | sort | uniq --repeated

который можно запустить как любой из следующих:

./find_overlaps c8f7e56536ab d9e2268e20b9
./find_overlaps 1 33

Если вы действительно хотели получить фантазию, вы можете настроить script для автоматического запуска слияния или переадресации в зависимости от того, были ли найдены какие-либо строки.

Если ты на окнах, мой бог тебе поможет.:)