Импортируйте патчи с конфликтующими изменениями для ртутного хранилища с помощью tortoiseHg - PullRequest
9 голосов
/ 04 июля 2011

Я успешно импортировал исправления без конфликтующих изменений. Но когда я пытаюсь импортировать патч с конфликтующими изменениями, он выдает ошибку «Hunk # 1 FAILED at 11 ..». Нет возможности объединить изменения. Есть ли другой способ сделать это?

Ответы [ 2 ]

5 голосов
/ 04 июля 2011

Неисправные блоки должны быть исправлены вручную.Должен быть файл * .rej с отклоненным порцией из патча.Вам придется применить его вручную.

см .: https://www.mercurial -scm.org / wiki / HandlingRejects

4 голосов
/ 06 июля 2011

Ручное разрешение

В последних версиях TortoiseHg 2.1 есть инструменты, которые помогут вам устранить отклоненные фрагменты из исправлений. Когда вы применяете патч, и у него есть отклонения, для каждого файла с отклонениями он спрашивает, хотите ли вы разрешить отклоненные фрагменты. Если вы нажмете кнопку «Да», появится экран с содержимым файла (с примененными успешными чанками), а также с каждым отклоненным чанком, что позволит вам вручную сделать изменения немного проще и пометить каждый как решенный.

Достижение трехстороннего слияния

Способ, которым я иногда обрабатываю большие отклонения, состоит в том, чтобы перебазировать патч. В TortoiseHg 1.x я мог выбрать один узел, щелкнуть правой кнопкой мыши по другому и фактически перебазировать патчи. В TortoiseHg 2.x они еще не добавили это обратно, но обходной путь не так уж и плох. Вы все еще можете перебазировать патчи в командной строке, используя hg rebase. В любом случае вам нужно включить расширения mq и rebase (и вы, вероятно, уже включили расширение). Этот ответ не место для обучения, как использовать mq или rebase (есть множество других ответов и статей, которые делают это), поэтому я буду предполагать некоторое знакомство с ними.

В обоих случаях вам нужно будет применить исправление к ревизии, на которой оно основано (или к той, где оно применяется чисто или близко к чистой).

Commandline:

  1. Выполнить hg rebase -s patchRev -d tip. Наряду с любыми другими переключателями, которые вы хотите использовать в команде rebase.

    Это вызовет ваш инструмент 3-way merge для разрешения конфликтов для каждого файла.

  2. Запустите hg qrefresh, чтобы убедиться, что результаты слияния обновлены в патче.

Пользовательский интерфейс TortoiseHg

  1. Завершите патч как обычную ревизию.
  2. Переместите эту ревизию на кончик:
    • Обновление к подсказке. Это важно, так как он использовался для установки цели операции rebase.
    • Щелкните правой кнопкой мыши на временном наборе изменений и выберите Rebase , чтобы открыть диалоговое окно Rebase.
    • Проверьте правильность источника и назначения и нажмите Продолжить . Если возникают конфликты слияния, нажмите на ссылку resolved , которая открывается, чтобы открыть диалоговое окно Resolve.
    • Нажмите Mercurial Resolve , чтобы Mercurial попытался автоматически разрешить некоторые конфликты.
    • Для всего остального используйте Инструмент Resolve , чтобы вызвать трехстороннее объединение для выбранных файлов.
    • После того, как все решены, нажмите Закрыть в диалоговом окне Resolve.
    • Нажмите Продолжить , а затем Закрыть в диалоговом окне Rebase.
  3. Щелкните правой кнопкой мыши на временном наборе изменений сейчас на подсказке и перейдите к Изменить историю > Импорт в MQ . Теперь это снова патч.

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

...