Обновление: в итоге мы использовали процесс, очень похожий на эту схему (спасибо neuro за ссылку).Мы перенесли репозиторий в состояние, в котором значение по умолчанию стабильно (и имеет тот же код, что и в нашей производственной среде), у нас есть ветка dev, ветки функций для новых вещей и использование веток релизов для релизов.Кажется, все работает отлично.
Backstory
Наша команда недавно перешла от использования SVN (с помощью Windows-клиента ToroiseSVN) к Mercurial (с помощью Windows-клиента TortoiseHg) для контроля версий.Мы успешно экспортировали наш репозиторий SVN и импортировали его в репозиторий Mercurial.
Теперь у нас есть репозиторий Mercurial, где мы можем видеть всю историю ревизий (наборов изменений в Mercurial).
Как мыделал это в старые времена
В старые времена жизнь была проще;наш процесс разработки не был действительно многопоточным, как сейчас. ствол использовался для хранения всего кода - даже изменений, которые все еще находились в полете (до тех пор, пока он не сломал ствол ).Когда дело дошло до управления выпусками с SVN, мы извлекали ствол (который содержит весь код), * 1021 * возвращали отдельные изменения, которые мы не хотели, как часть выпуска, и создавали тег за это.
Набрать нужный код с помощью SVN было легко.Исправление ошибок предыдущих выпусков и обеспечение того, чтобы это было частью trunk , было также просто.
Что мы делаем сейчас
В Mercurial нам нужно иметь возможность получитьснимок «ствола» ( по умолчанию в Mercurial) с отмененными отдельными изменениями.Мы можем сделать это, используя hg revert .
Чтобы сделать снимок этого, мы создали «именованную ветвь» - назовем ее пока Build-4.0.1 .
Там, где возникает проблема
Разработка продолжается по умолчанию как обычно, когда обнаружена ошибка в Build-4.0.1 .Давайте предположим, что ошибка находится в одном из возвращенных файлов.Мы меняем код из ветви для Build-4.0.1 , создаем новую "именованную ветку" ( Build-4.0.2 ) и хотим объединить он возвращается в по умолчанию , не нажимая перевернутый код поверх нового кода.Как мы можем это сделать?
В качестве альтернативы, есть ли лучший рабочий процесс для управления выпусками и нашим кодом в Mercurial?Мне очень нравится, как выглядит этот замечательный ответ SO по управлению ветвями релиза , хотя я не уверен, как мы можем перейти к нему из того состояния, в котором мы находимся сейчас (с вещами в полете в по умолчанию)).
Примечание. Я смотрел на расширение Transplant , но еще не использовал его - может ли оно быть частью решения этой задачи?