Ручное разрешение
В последних версиях TortoiseHg 2.1 есть инструменты, которые помогут вам устранить отклоненные фрагменты из исправлений. Когда вы применяете патч, и у него есть отклонения, для каждого файла с отклонениями он спрашивает, хотите ли вы разрешить отклоненные фрагменты. Если вы нажмете кнопку «Да», появится экран с содержимым файла (с примененными успешными чанками), а также с каждым отклоненным чанком, что позволит вам вручную сделать изменения немного проще и пометить каждый как решенный.
Достижение трехстороннего слияния
Способ, которым я иногда обрабатываю большие отклонения, состоит в том, чтобы перебазировать патч. В TortoiseHg 1.x я мог выбрать один узел, щелкнуть правой кнопкой мыши по другому и фактически перебазировать патчи. В TortoiseHg 2.x они еще не добавили это обратно, но обходной путь не так уж и плох. Вы все еще можете перебазировать патчи в командной строке, используя hg rebase
. В любом случае вам нужно включить расширения mq
и rebase
(и вы, вероятно, уже включили расширение). Этот ответ не место для обучения, как использовать mq
или rebase
(есть множество других ответов и статей, которые делают это), поэтому я буду предполагать некоторое знакомство с ними.
В обоих случаях вам нужно будет применить исправление к ревизии, на которой оно основано (или к той, где оно применяется чисто или близко к чистой).
Commandline:
Выполнить hg rebase -s
patchRev
-d tip
. Наряду с любыми другими переключателями, которые вы хотите использовать в команде rebase
.
Это вызовет ваш инструмент 3-way merge для разрешения конфликтов для каждого файла.
Запустите hg qrefresh
, чтобы убедиться, что результаты слияния обновлены в патче.
Пользовательский интерфейс TortoiseHg
- Завершите патч как обычную ревизию.
- Переместите эту ревизию на кончик:
- Обновление к подсказке. Это важно, так как он использовался для установки цели операции rebase.
- Щелкните правой кнопкой мыши на временном наборе изменений и выберите Rebase , чтобы открыть диалоговое окно Rebase.
- Проверьте правильность источника и назначения и нажмите Продолжить . Если возникают конфликты слияния, нажмите на ссылку resolved , которая открывается, чтобы открыть диалоговое окно Resolve.
- Нажмите Mercurial Resolve , чтобы Mercurial попытался автоматически разрешить некоторые конфликты.
- Для всего остального используйте Инструмент Resolve , чтобы вызвать трехстороннее объединение для выбранных файлов.
- После того, как все решены, нажмите Закрыть в диалоговом окне Resolve.
- Нажмите Продолжить , а затем Закрыть в диалоговом окне Rebase.
- Щелкните правой кнопкой мыши на временном наборе изменений сейчас на подсказке и перейдите к Изменить историю > Импорт в MQ . Теперь это снова патч.
Я предпочитаю последний метод для более неприятных случаев, потому что по умолчанию он не позволяет Mercurial автоматически разрешать конфликты. Это позволяет мне выбирать порядок, в котором я разрешаю файлы и как я их разрешаю, показывая состояние моего прогресса с каждым шагом.