Для каждого общедоступного сервера у нас есть три этапа: разработка, тестирование и производство. Каждый из этих этапов представляет собой веб-сервер. Я использую именованные ветки в Mercurial, чтобы дополнить этот процесс. Хитрость заключается в том, чтобы отправить правильные версии вещей на правильные серверы, то есть тестовая ветвь будет отправлена на тестовый веб-сервер при запуске скрипта для публикации теста.
У меня есть крючки и проработаны все мелкие детали. Часть, в которой я не уверен, - это файловая структура Mercurial. Я хочу реализовать процесс публикации с помощью RSync, и для этого мне нужна локальная папка для синхронизации. Эта папка может быть той, в которой я создал репозиторий на сервере, но мне нужно подтвердить, что серверная версия репозитория может быть текущим в любой ветке, которую я хочу.
Т.е. я создаю репозиторий в тесте
cd test
hg init
touch sample
hg add ./*
hg commit -m "whatever" -u someowner
Теперь предположим, что я выполняю кучу работы с рабочей станции и фиксирую изменения в репозитории, которые создают две именованные ветки. test
и prod
. Что меня беспокоит, так это фактический каталог тестов. Могу ли я сделать так, чтобы этот каталог содержал последнюю версию определенной именованной ветки (на сервере, где я выполнил вышеупомянутую инициализацию) и не повредил сам репозиторий?
Примите это в контексте того, что я новичок в Mercurial.
Если я правильно понимаю сценарий и вопрос, то ответ - «да».
Позвольте мне объяснить, о чем я думаю, вы спрашиваете: у вас где-то размещен репозиторий Mercurial, и у вас есть три именованных ветки в этом репозитории. Я предполагаю, что их зовут default
, test
, и prod
. Разработчики помещают изменения в репозиторий.
Вы хотите опубликовать код на трех разных веб-серверах, назовем их web-default
, web-test
, и web-prod
. Вы хотите использовать rsync
для этого.
Все это очень разумная установка. Главный вопрос - сможете ли вы запустить
$ hg update test
$ rsync -av --exclude .hg . web-test:/var/www
в репозитории сервера и не повлияет ли это на будущие нажатия. Ответ - «да», вы можете обновить рабочую копию до любой нужной ревизии - на наборы изменений, которые отправляются на сервер, это никак не влияет.
Таким образом, вы можете сделать три перехвата на сервере, примерно так:
[hooks]
changegroup.default = hg update default && rsync ... web-default:/var/www
changegroup.test = hg update test && rsync ... web-test:/var/www
changegroup.prod = hg update prod && rsync ... web-prod:/var/www
Это будет публиковать подсказку каждой ветки на соответствующем веб-сервере всякий раз, когда кто-то нажимает на репозиторий. Надеюсь, это вам поможет!