Исправлена ​​ошибка слияния в Mercurial - PullRequest
3 голосов
/ 19 октября 2011

В нашей конфигурации проекта Mercurial у нас есть 3 ветви в одном репозитории.Одна из них - это ветка стабильного выпуска, в которой выполняются срочные исправления ошибок, другая - ветка функций, содержащая новый код функции, а другая - ветка UAT, в которой исправления ошибок и новые функции объединяются для обеспечения самой современной базы кода..

Мы объединили целую загрузку нового кода функции в ветку UAT без каких-либо проблем.После этого мы слили стабильную ветвь с исправлениями ошибок в ветку UAT, но это, похоже, приводит к удалению нового кода функции.Я обнаружил, что эта проблема была вызвана тем, что какое-то время назад кто-то сливал UAT в стабильный (что никогда не должно было происходить !!).Теперь, когда я пытаюсь объединить исправления ошибок в UAT, он удаляет весь новый код функции.

Есть ли способ убрать эффекты слияния из UAT в стабильные, сохраняя при этом исправления ошибок, которые являются потомкамипосле этого «плохого слияния»?Я попытался отказаться от слияния, но, похоже, это никак не отразилось.Могу ли я сделать полосу и заново добавить необходимые наборы изменений обратно?

Заранее спасибо.

1 Ответ

1 голос
/ 21 октября 2011

Мне на самом деле удалось исправить это самому путем проб и ошибок.

Сначала вам нужно включить расширения трансплантата и mqMerge в файле mercurial.ini. Добавьте строки, следующие за строками под заголовком расширения

   transplant=
   mq=

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

Затем вам нужно выбрать все необходимые наборы изменений в хронологическом порядке из другого репо, используя команду, аналогичную приведенной ниже

    hg transplant -s "otherRepo" -b "branchName" "changesetHexNumber"

Повторите команду трансплантации для всех необходимых наборов изменений. Ouila!

NB. Если вы используете центральный репозиторий, вам нужно будет также удалить туда слияние / изменение набора, если это не так, иначе ваше локальное хранилище сочтет, что у вас есть выдающиеся наборы изменений для извлечения.

...