Насколько я могу судить, вы спрашиваете, как работать с различными ветками разработки в Mercurial.В вашем примере вы хотите легко иметь возможность выпускать исправления для версии выпуска без необходимости разбираться со всем, что происходило в ветке разработки с момента последнего выпуска.
Существует много способов обработки ветокв Mercurial.Вы можете использовать отдельные репозитории, именованные ветви и расширение Bookmarks среди других.То, как вы выбираете обработку веток в Mercurial, связано с типом рабочего процесса, который у вас есть, но есть много возможных комбинаций.
Имея это в виду, я дам некоторые общие рекомендации для рабочего процесса между ветками, независимо от того, как онипредставлены в Mercurial (в виде отдельных репозиториев, именных веток и т. д.).Если вы хотите узнать больше о том, какую модель ветвления выбрать, я предлагаю вам прочитать Руководство Стива Лоша по ветвлению в Mercurial и мой пост в блоге о выборе модели ветвления в Mercurial .
Прежде всего, даже если веток нет вообще, вы все равно всегда можете вернуться к более ранней редакции кода, например, к версии 2.0, и исправить там ошибку.Это позволит легко пометить и выпустить новую версию (скажем, 2.0.1), единственное изменение - исправление ошибки.
Это можно сделать, просто обновив, исправив и зафиксировав:
$ hg update 2.0
hack hack hack
$ hg commit -m "Fix nasty bug"
$ hg tag 2.0.1
Вышеприведенное предполагает, что вы пометили ревизию 2.0, поэтому ее легко получить, иначе вам придется вместо этого указать хеш или идентификатор ревизии.
Это даст вам две головы, которые вы можете объединить.с помощью hg merge
, возвращая исправление в версию для разработки.
Если у вас есть отдельный репозиторий для выпуска 2.0, вы вносите исправление в него, а затем помещаете его в репозиторий разработки, где затем объединяетесь.Основным принципом является тот, который описал Ry4an, вы вносите изменения там, где еще нет множества других изменений, которые вам не нужны.
Вот пример:
Где яВ работе у нас много репозиториев, представляющих разные отрасли.Большая часть разработки происходит в ветке "dev".Когда релиз приближается, мы клонируем этот репозиторий в новый, называемый скажем "release-2.4".В этой ветке / репозитории мы тестируем и исправляем ошибки в следующем выпуске.Дополнительные экспериментальные разработки, которые не будут готовы до следующего выпуска, могут происходить в "dev" параллельно.
Когда релиз протестирован и готов к выпуску, мы вытягиваем все из «release-2.4» в «prod», который содержит только выпущенные версии кода.Мы помечаем его номером версии и выпускаем для всего мира.Затем мы можем удалить ветку «release-2.4» и вытянуть все из «prod» в «dev».Это может потребовать слияния, но тогда мы внесем все изменения, сделанные в процессе выпуска, обратно в «dev» и сможем продолжить работу над следующим выпуском.
Если мы хотим исправить ошибку вне больших запланированных выпусковМы можем сделать это несколькими способами.Если исправление небольшое (пара коммитов) или не требует участия многих разработчиков, мы можем просто зафиксировать непосредственно «prod», пометить релиз и отправить его.После этого мы вытащим из «prod» в «dev», чтобы убедиться, что исправление есть и в следующем выпуске.
Если выпуск исправления ошибки больше и займет больше времени, мы можем вместо этого сделатьНовая ветка от "Prod", сделайте всю нашу работу над выпуском там, а затем перенесите изменения в "Prod".Когда он выходит в «prod», мы можем «вытянуть» из «prod» в «dev», чтобы получить изменения.Затем можно удалить специальную ветку релиза.