Создание и сопровождение сайтов

Блог. Разработка. Mercurial: слияние именованных ветвей

Поиск

В данный момент репозиторий для Open Real Estate пришлось разделить на три ветви:

  • default - основная ветка разработки;
  • demo - версия для он-лайн демо. В некоторых местах кода стоят "заглушки" на закачку файлов на сервер, запрет на смену паролей (неприятно будет, если кто-то поменяет пароль на доступ и другие пользователи не смогут залогиниться и посмотреть на продукт);
  • release - версия для релиза. Отличается от основной ветки тем, что убраны некоторые модули (распространяемые отдельно и платно).

    Так же настроены роботы, которые обновляют демо-сайт, проставляют номера версий в релизе и др. Именно из-за роботов пришлось разделить всё на ветви. До этого делались попытки обновлять всё вручную (создавать архив релиза, ложить на демо-сайт через ftp). Но это большие расходы времени разработчика - код приходилось править в трех местах, поэтому решил потратить время один раз и перевести всё на полуавтоматические рельсы.

    Собственно, эта заметка объясняет основные моменты использования репозитория с именованным ветвями - как, например, собрать правильное демо, применяя к ветке demo изменения из ветки default.

    Итак, нам надо переключиться в одну из веток, например demo. Выполняем:

hg update demo

Ура, мы в ветке demo. Теперь нам надо актуализировать её. Ведь, скорее всего, основная ветка "ушла" далеко вперед, там уже множество правок. А наша текущая ветка demo старенькая, и не содержит, например, свежих багфиксов. Выполняем команду:

hg merge default

В этом случае все изменения (если они есть) в ветке default применятся к текущей ветке. Если все прошло без конфликтов - замечательно. Но что же делать, если возникли конфликты? В предыдущей статье я начал рассказывать про основы пользования программами-"сливалками". Собственно, проделываем все те же самые операции - разрешаем конфликты (результирующий код слияния должен быть в файле LOCAL).

    После слияния не забываем сделать: hg commit -m "Актуализация ветки demo"

    После чего вносим изменения в данную ветку (если они нужны) и снова делаем коммит, после чего отправляем все наши изменения на сервер: hg push

    Единственный момент, который может омрачить счистливое следование этой инструкции - это ошибка при попытке слияния:

abort: merging with a working directory ancestor has no effect

Ничего страшного - это лишь указывает на то, что у нас demo-ветка содержит все актуальные изменения.

    Спасибо за внимание!

    PS: комментарии, замечания и вопросы приветствуются