Как настроить Mercurial для развертывания только папки сайта - PullRequest
3 голосов
/ 22 марта 2012

У меня есть веб-сайт, который я хочу развернуть на клиентских средах DEV и UAT, этот сайт является частью ртутного репозитория - он находится в папке Website на том же уровне, что и папка .hg. Я знаю, что может выдвинуть весь репозиторий, но предпочел бы только папку веб-сайта, чтобы у клиента не было других файлов и папок.

Репо выглядит так:

  • Корень проекта
    • .hg
    • База данных (SQL Source Control использует это)
    • Документация (Все спецификации, pdf, художественные работы и т. Д.)
    • Lib (до Nuget сторонних dll)
    • пакетов (Nuget stuff)
    • Веб-сайт (это единственная область, которую я хочу развернуть)
    • .hgignore
    • Project.sln

Edit: Клиентские серверы не подключены напрямую к Интернету, мой доступ к ним осуществляется через VPN и затем RDP. В настоящее время для развертывания любых изменений мне нужно заархивировать сайт, поместить его на общий FTP-сервер, затем подождать до 3 дней, пока файлы будут скопированы на серверы. Правила настроены так, что я могу использовать Mercurial через это соединение.

Редактировать 2 Мне удалось создать подпункт из папки «Веб-сайт», забыв папку «Веб-сайт» и все ее содержимое, зафиксировав изменение, затем вернув файлы обратно, создав репо и повторив файл .hgsub. Локально это работает для меня, я могу клонировать из репозитория сайта, не получая никаких дополнительных папок. Однако я не смог использовать эту версию репо, даже если я повторю процесс на нашем сервере репо. Когда я пытаюсь клонировать размещенную версию в свою локальную рабочую копию, я получаю 404 ошибки, но я могу клонировать размещенную версию на хост-сервере.

Буду признателен за некоторые пошаговые инструкции (руководство для чайников, если хотите) о том, как достичь моей цели; который должен иметь возможность отправлять только папку веб-сайта на серверы клиентов. Основная копия репо находится на нашем сервере репо, у меня есть локальный клон, и мне нужно иметь возможность выталкивать версии из моей копии.

Редактировать 3 Оказывается, проблема с преобразованием папки в подпункт, как описано в http://mercurial.aragost.com/kick-start/en/subrepositories/#converting-folder-into-a-subrepository, заключалась в том, что команда convert в версиях после 2.1.0 не работает и все еще не работает в 2.3.1. После того, как я понял это и откатился до этой версии TortoiseHg, я смог преобразовать папку в подпункт, в корне репозитория у меня есть .hgsub с надписью Website = Website. Я смог работать с этим локально, зафиксировать все репо, субрепо, клонировать либо полное репо, либо репо (что я и хочу), , однако я не могу заставить это работать из нашего главного репо сервер .

Я заархивировал все это и установил ftp на наш удаленный главный сервер репо, а затем настроил его, чтобы можно было клонировать с него. Непосредственно на сервере это работает нормально (hg clone --verbose - C: \ Repositories \ EM.), Однако, когда я пытаюсь клонировать с сервера на мою локальную машину разработки с помощью (hg clone --verbose - https://myserver.com/hg/EM/.) Происходит сбой с сообщением «Ошибка HTTP: 404 (не найдено)».

requesting all changes
adding changesets
adding manifests
adding file changes
added 628 changesets with 6002 changes to 4326 files
updating to branch default
resolving manifests
calling hook preupdate.eol: <function preupdate at 0x00000000035204A8>
getting .hgignore
getting .hgsub
getting .hgsubstate
HTTP Error: 404 (Not Found)
[command returned code 255 Fri Apr 20 10:51:23 2012]

Я не знаю, в чем проблема, файлы есть, так почему 404?

Ответы [ 4 ]

2 голосов
/ 23 марта 2012

По моему мнению, Mercurial не должен использоваться для этой цели. Это особенно верно, если этот веб-сайт является веб-приложением, потому что у вас не должно быть библиотек DLL в Mercurial.

Вы должны взглянуть на инструмент веб-развертывания, встроенный в Visual Studio. Взгляните на эту страницу, чтобы увидеть, соответствует ли она вашим целям.

Если вы не можете установить необходимые службы на конечном сервере, его можно настроить на использование FTP.

1 голос
/ 22 марта 2012
  1. Вы не можете выдвинуть часть дерева репо.
  2. Если среды DEV и UAT не являются целевыми объектами, вы можете использовать любой другой способ распространения контента Mercurial
  3. . subrepo и смогут подтолкнуть к этому репо
0 голосов
/ 26 апреля 2012

У меня есть рабочее решение для этого. Я создал пакетный файл, который создает исходящее репо и запускает встроенный сервер, чтобы я мог использовать его на клиентских машинах. Сначала он очищает предыдущую папку, затем клонирует из моей локальной рабочей копии (есть параметр, чтобы определить, из какого тега он должен клонироваться). Затем он создает файл карты и преобразует папку «Сайт» в новую папку «Сайт2», чтобы сохранить историю, затем удаляет исходную папку и переименовывает новую. Наконец он раскручивает встроенный сервер.

cd c:\inetpub\wwwroot
rd /S /Q _ProjectName
hg clone -- C:\inetpub\wwwroot\ProjectName#%1 C:\inetpub\wwwroot\_ProjectName
cd c:\inetpub\wwwroot\_ProjectName
echo include Website > map.txt
echo rename Website . >> map.txt
hg --config extensions.hgext.convert= convert --filemap map.txt . Website2
cd Website2
hg update
cd ..
hg remove Website/*
hg commit -m "Removed Website"
rename Website2 Website
hg serve

Так что это не красиво, но теперь мне просто нужно вызвать пакетный файл и передать тег, из которого я хочу создать исходящий веб-сайт (uat, dev и т. Д.), И дать ему минуту для создания папки моего веб-сайта, с историей, которую я могу использовать, чтобы вытащить или подтолкнуть. Мне не нужно вызывать hg serve, потому что я знаю имена клиентских серверов, чтобы я мог выдвинуть набор изменений, создав псевдонимы для удаленных репозиториев. Но я включил этот шаг, чтобы клиентские машины могли работать. Я не полностью изучил этот вариант, поэтому я не уверен, есть ли у него какое-то конкретное преимущество. Это хорошо для случая, когда над проектом работает только я, но если любому другому разработчику нужно поработать над этим, тогда Uri для их локального сервера проекта, очевидно, будет другим (http://SIMON -PC: 8000 / не будет случай для всех), в этом случае лучше всего было бы нажать на клиента.

Но, используя этот подход, мое локальное рабочее репо не нужно менять, и поэтому у меня не возникает проблем при общении с нашим центральным репо, 404 ошибки, упомянутые в edit3. Я храню всю историю репо с помощью процесса конвертации, поэтому в следующий раз, когда мне нужно будет отправить изменения, я не начинаю с ревизии 1 - другими словами, это не разрушительно для Веб-сайта и, хотя я удаляю весь исходящий текст репо (_ProjectName) каждый раз, когда я сохраняю историю и все еще могу перетаскивать / выдвигать ТОЛЬКО каталог веб-сайта, поскольку он создается каждый раз как «автономное» репо

0 голосов
/ 23 марта 2012

Как уже отмечали другие, вы не можете использовать push для этого.Просто сделайте rsync с вашего сервера на их.Вы могли бы даже автоматизировать это в хуке, когда вы перемещаетесь в локальный репозиторий, и он автоматически развертывается на их сайте.Что-то вроде:

[hooks]
changegroup.deploy = $HG update ; rsync Website account@theirserver:/path/to/docroot
...