Структура файла репозитория на сервере
Для каждого публичного сервера у нас есть три этапа: разработка, тестирование и производство. Каждый из этих этапов является веб-сервером. Я использую именованные ветви в Mercurial, чтобы дополнить этот процесс. Хитрость заключается в передаче правильных версий вещей на правильные серверы, т. Е. Ветвь теста будет отправлена на тестовый веб-сервер при запуске сценария публикации теста.
У меня есть крючки и все мелкие детали проработаны. Часть, в которой я не уверен, это файловая структура Mercurial. Я хочу реализовать процесс публикации с использованием RSync, и для этого мне нужно синхронизировать локальную папку. Эта папка может быть той, в которой я создал репозиторий на сервере, но мне нужно подтвердить, является ли серверная версия репозитория. может быть актуальным для любой отрасли, которую я хочу.
Т.е. я создаю репозиторий в тесте
cd test
hg init
touch sample
hg add ./*
hg commit -m "whatever" -u someowner
Теперь допустим, что я выполняю кучу работы с рабочей станции и фиксирую изменения в хранилище, которые создают две именованные ветви. test
а также prod
, Что меня беспокоит, так это фактический каталог тестов. Могу ли я сделать так, чтобы этот каталог содержал последнюю версию определенной именованной ветви (на сервере, где я выполнял инициализацию выше) и не повредил сам репозиторий?
Возьмите это в контексте, что я новичок в Mercurial.
1 ответ
Если я правильно понимаю сценарий и вопрос, то ответ "да".
Позвольте мне объяснить, что, по вашему мнению, вы спрашиваете: у вас есть хранилище 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
Это будет публиковать кончик каждой ветви на соответствующий веб-сервер всякий раз, когда кто-то отправляет в хранилище. Я надеюсь, что это поможет вам!