Я работаю с клиентом, у которого есть выделенный сервер Plesk на базе Linux. Сайт (скажем example.com
) работает, и поскольку обычно требуются огромные изменения, очень сложно заставить их работать непосредственно в режиме реального времени. На сервере не было SVN, только FTP.
Я создал поддомен staging.example.com
и поместил туда файлы через FTP, чтобы клиент мог видеть изменения до того, как сделать их доступными. Излишне говорить, что для меня это адская боль — помнить каждый файл, связанный с каждой задачей, загружать и тестировать на промежуточном сервере, а затем снова вспоминать, что это были за файлы, и делать это снова для живого сервера. Я несколько раз «успешно проваливал» это, делая безупречно.
Я хочу использовать SVN сейчас. Мне удалось установить SVN с помощью SSH (у меня есть полный доступ к нему) и репозитория (в /var/www/vhosts/example.com/svn/repos
), но дальнейшие настройки кажутся мне неоднозначными. Я хочу, чтобы настройка была такой:
- SVN Server (работает на
svn.example.com
- уже сделано) - «главная» копия в
staging.example.com
, в/var/www/vhosts/example.com/staging
(Не уверен, имеет ли «главная» какое-то конкретное значение в SVN. Я просто имею в виду основную копию) - Рабочий каталог в
www.example.com
,/var/www/vhosts/example.com/httpdocs
чтобы я мог выполнить обновление svn, чтобы мои изменения вступили в силу - Еще один рабочий каталог на моем компьютере, где я буду выполнять настоящую работу.
Мой план заключается в том, что я выполню работу на своем компьютере, закоммитю ее, чтобы можно было протестировать на тестовой версии, и если все в порядке, то обновлю ее с рабочего сайта, чтобы мои изменения вступили в силу.
Пожалуйста, объясните мне, как мне этого добиться. Также учтите, что я программист, а не системный администратор, поэтому мой план может иметь некоторые проблемы. Если вы так считаете, пожалуйста, укажите альтернативное решение. Я уже давно использую SVN, но это было только checkout-commit-update-resolve, без настройки. Вот почему мне сейчас нужна помощь.
решение1
Самым простым решением, вероятно, будет просто проверить код (только trunk, без веток и т. д.) в трех местах. Затем вам просто нужно убедиться, что вы делаете "svn up" в нужных папках в нужное время.
Итак, попробуйте следующее (комментарии описывают каждый фрагмент).
#SSH to the server as a user who can modify /var/www/vhosts/...
...
cd /var/www/vhosts/ # Since this is a live server, we need to make the
# changeover fast, so work in a new folder.
mkdir example.com_svn # Make the new folder
cd example.com_svn
svn co http://example.com/svn/repos/website staging # Check out the repository
# into a new folder called
# "staging".(Change "website"
# to your folder name)
svn co http://example.com/svn/repos httpdocs # Ditto, but "httpdocs"
# At this point you need to make the file permissions and ownership the same as
# the folders within the /var/www/vhosts/example.com.
# Once you've done that continue...
cd ..
mkdir example.com_old
mv example.com/staging example.com_old/. && mv example.com_svn/staging example.com/.
# This will make the svn version of the staging site live. Check that it works
# then do the same with the httpdocs folders.
Более сложным решением было бы использовать две ветки кода, одну для стейджинга и другую для лайва. Но это, вероятно, было бы излишним для этого...
решение2
Расширенная версия ответа ed
Предисловие
Вам необходимо получить некоторые навыки администрирования Subversion, чтобы все работало правильно и понимать процессы, происходящие внутри.
Лицо
У тебя должно быть:
- Один репозиторий
- Две ветки (как минимум) в репозитории (например,
STAGING
иLIVE
) - Хук посткоммита со встроенной бизнес-логикой «опубликовать на STAGE или LIVE цели»
ТриЧетыре Рабочие Копии: DEV (ваше локальное рабочее место, привязанное к ветке STAGING), MERGE (ваше локальное рабочее место, привязанное к ветке LIVE), STAGING (на сервере STAGING, привязанное к ветке STAGING), LIVE (на сервере LIVE, привязанное к ветке LIVE)- Клиент SVN установлен на STAGING и LIVE
Рабочий процесс:
- Редактировать код в DEV
- Фиксация - хук после фиксации обновит WC на STAGING
- Тестовые изменения на STAGING
- Слияние в MERGE WC (проверено) изменений из ветки STAGING /эффективное слияние из ветки STAGING в ветку LIVE/
- Зафиксировать изменения в ветке LIVE — хук после фиксации обновит WC на LIVE с объединенными изменениями (хук может обнаружить такой тип фиксации по ключевому слову в сообщении о фиксации /
svnlook log | grep KEYWORD
/ или по изменениям в ветке LIVE /svnlook dirs-changed
/)
Примечание:
Вместо WC на серверах ssh & svn up
можно использовать FTP или scp - меньше Subversion, больше головной боли с обновлением сайтов (удаленные файлы будутнетбыть удалено FTP|scp и процесс в целом кажется более сложным /для меня/)