Насколько я могу судить, вы спрашиваете о том, как обрабатывать различные ветви разработки в Mercurial. В вашем примере вы хотите легко выпускать исправления для версии выпуска без необходимости иметь дело со всеми вещами, которые произошли в ветке разработки с момента последнего выпуска.
В Mercurial есть много способов обрабатывать ветки. Вы можете использовать, среди прочего, отдельные репозитории, именованные ветки и расширение закладок. То, как вы решите обрабатывать ветки в 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», чтобы получить там изменения. Затем специальную ветку выпуска можно удалить.
person
Joakim Hårsman
schedule
16.10.2010