Как ведущий веб-разработчик в организации моего работодателя, я отвечаю за настройку и поддержку репозитория SVN для каждого из наших веб-приложений. У каждого есть несколько заархивированных версий и как минимум пара веток.
В настоящее время для развертывания последней версии каждого веб-сайта я «экспортирую» соответствующую помеченную версию в каталог, из которого Apache обслуживает этот сайт. Например, предположим, что у меня есть рабочая копия, извлеченная из / var / www / dev / app:
$ cd /var/www/dev/app/archive/1.2
$ svn export . /var/www/html/www.myapp.com
Но на самом деле мне бы хотелось, чтобы действующий сайт был связан с версией репозитория, чтобы я мог выполнить «svn update», чтобы получить последние обновления; Я просто не хочу, чтобы какие-либо файлы или небольшие изменения в каталоге динамического развертывания были зафиксированы обратно в репозиторий.
Я бы хотел создать в репозитории ветвь только для чтения, которая всегда содержит последнюю производственную версию приложения, которую я могу проверить в каталоге развертывания.
Я видел это во многих проектах с открытым исходным кодом, где каждый может проверить конкретную ветвь приложения, но это только чтение ветвь, поэтому вы не можете вернуться к ней.
Как я могу этого добиться?
Чтобы отключить все коммиты, добавьте скрипт перехвата перед фиксацией, который выглядит так:
#!/bin/sh
echo "Read-only SVN; no commits allowed!" 1>&2
exit 1
Или, если вы хотите сделать только один путь только для чтения (например, одну ветку или что-то в этом роде), попробуйте:
#!/bin/bash
REPOS="$1"
TXN="$2"
if svnlook changed $REPOS -t $TXN |grep -q "mybranch/" ; then
echo "Read-only branch mybranch/; no commits allowed! " 1>&2
exit 1
fi
exit 0
Вы, конечно, можете делать любые другие проверки в этом if
заявление.
Добавьте сценарий перехвата перед фиксацией, который проверяет потенциальные фиксации измененных путей и отклоняет фиксации, которые фиксируются в вашей указанной ветке, если они не исходят от того пользователя, который авторизован для создания рассматриваемых ветвей.
Вы также можете сделать это из разрешений репо на стороне сервера, способ их применения зависит от того, как вы открываете репозиторий.
Если вы используете Apache для интерфейса ваших запросов Subversion, вы можете использовать Файл авторизации Subversion для управления доступом ко всем расположениям тегов. Оттуда вы можете настроить свой веб-сервер так, чтобы у него была собственная учетная запись, доступная только для чтения для папки тегов. Вы даже можете пойти так далеко, что веб-сервер даже не имеет доступа на чтение к чему-либо еще, кроме каталога тегов по определенным путям.
Если вы всегда создаете тег с тем же именем, который используется для производственного развертывания, то обновление svn будет работать. В противном случае вы можете использовать переключатель svn для перехода между тегами по мере необходимости. Согласно Книга о Subversion, svn update и svn switch в основном делают то же самое.
Теперь преимущество использования этого состоит в том, что вы также можете более детально контролировать, что ваши разработчики могут и не могут делать. Вы также можете контролировать, какие части ваших репозиториев доступны для публичного чтения, а какие - нет.
Если и когда вы это настроите, и если ваш веб-сайт является общедоступным, обязательно сообщите своему веб-серверу, чтобы он не обслуживал контент в папках .svn.