Назад | Перейти на главную страницу

Файловая структура репозитория на сервере

Для каждого общедоступного сервера у нас есть три этапа: разработка, тестирование и производство. Каждый из этих этапов представляет собой веб-сервер. Я использую именованные ветки в 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

Это будет публиковать подсказку каждой ветки на соответствующем веб-сервере всякий раз, когда кто-то нажимает на репозиторий. Надеюсь, это вам поможет!