Subversion · 3 min read · Jan 02, 2026
Настройка репозитория Subversion с использованием Apache, с автообновляемой рабочей копией - Страница 2
Создание репозитория:
Предположим, я хочу создать репозиторий по адресу /usr/local/subversion/repository, используя базу данных fsfs, поэтому выполните команду:
mkdir -v /usr/local/subversion//usr/bin/svnadmin create --fs-type fsfs /usr/local/subversion/repositoryЭто должно создать репозиторий subversion по адресу /usr/local/subversion/repository.
ls /usr/local/subversion/repositoryconf/ dav/ db/ format hooks/ locks/ README.txtВы должны увидеть эти файлы в каталоге репозитория.
Настройка httpd.conf для обслуживания созданного репозитория:
Добавьте следующие строки в httpd.conf или в соответствующий файл конфигурации apache.
DAV svn
SVNPath /usr/local/subversion/repository/
Убедитесь, что модуль mod_dav загружен в файле конфигурации apache и также присутствует в каталоге модулей.
Настройка аутентификации:
Для аутентификации нам нужно еще раз внести изменения в конфигурацию apache.
Базовая аутентификация требует, чтобы мы просто добавили следующие строки в httpd.conf, где мы ранее добавили репозиторий svn.
AuthType Basic
AuthName "{Имя всплывающего окна аутентификации}"
AuthUserFile {Местоположение файла паролей}
Require valid-userТаким образом, это должно выглядеть так.
DAV svn
SVNPath /usr/local/subversion/repository/
AuthType Basic
AuthName "Репозиторий Subversion"
AuthUserFile /usr/local/subversion/repository/conf/svn-auth-file
Require valid-user
Необходимо добавить пользователей в файл паролей, прежде чем кто-либо сможет получить к нему доступ, что описано в следующем шаге.
Добавление пользователей SVN:
Поскольку мы используем svn с сервером apache и методом базовой аутентификации apache.
Нам нужно создать файл паролей с помощью бинарного файла htpasswd, предоставленного с стандартной установкой apache.
htpasswd -cmd /usr/local/subversion/repository/conf/svn-auth-file {имя-пользователя}Опция -c создает новый файл htpasswd.
-m шифрует пароль с помощью алгоритма MD5.
-d шифрует пароль с помощью алгоритма CRYPT.
Где {имя-пользователя} обозначает фактическое имя пользователя, которое будет использоваться для аутентификации.
Предупреждение: Мы не должны использовать опцию -c после того, как добавили первого пользователя. Использование этой опции создаст и заменит всех существующих пользователей в файле.
htpasswd -md /usr/local/subversion/repository/conf/svn-auth-file {имя-пользователя}Настройка начальной структуры репозитория:
Репозиторий в основном содержит 3 стандартные папки.
branchestagstrunkДля создания этих стандартных папок в репозитории создайте временную папку в любом месте, где вы хотите, /tmp будет хорошей идеей, с следующими подкаталогами.
mkdir -pv /tmp/subversion-layout/{branches,tags}После того, как мы создали все папки для структуры, переместите все содержимое вашего проекта в папку trunk.
mv -v /usr/local/apache2/htdocs /tmp/subversion-layout/trunkЗатем выполните начальный импорт временно созданного каталога.
/usr/local/subversion/bin/svn import /tmp/subversion-layout/ http://127.0.0.1/subversion/Это настроит вас с макетом репозитория по умолчанию и создаст первый ревизию.
Настройка рабочей копии:
Мы можем удалить временные папки, которые мы создали на последнем шаге, так как все файлы уже находятся в репозитории.
Теперь нам нужно сделать рабочую копию всех файлов в репозитории по адресу /usr/local/apache2/htdocs.
Так что, когда разработчик обновляет php-коды, он может видеть изменения кода, вступающие в силу в рабочей среде.
Но настройка рабочей копии не выполнит эту задачу, нам нужно будет сделать скрипты хуков для работы с рабочей копией.
Таким образом, каждый раз, когда разработчик коммитит в репозиторий, скрипт хука будет запускаться сам и обновлять рабочую копию.
Убедитесь, что папка htdocs по адресу /usr/local/apache2/ уже не существует.
Если хотите, вы можете переименовать ее в htdocs_old.
Чтобы настроить рабочую копию, выполните следующее.
cd /usr/local/apache2/su – apache/usr/local/subversion/bin/svn checkout http://127.0.0.1/subversion/trunk/ htdocsНастройка скриптов хуков:
Хук - это программа, которая срабатывает при каком-либо событии репозитория, таком как создание новой ревизии или изменение неверсированной свойства. Каждому хуку передается достаточно информации, чтобы определить, что это за событие, над какими целями оно работает и имя пользователя, который вызвал это событие. В зависимости от вывода или статуса возврата хука, программа хука может продолжить действие, остановить его или приостановить его каким-либо образом.
Подкаталог hooks по умолчанию заполнен шаблонами для различных хуков репозитория.
post-commit.tmpl post-unlock.tmpl pre-revprop-change.tmplpost-lock.tmpl pre-commit.tmpl pre-unlock.tmplpost-revprop-change.tmpl pre-lock.tmpl start-commit.tmplНа данный момент я буду обсуждать скрипт хука post-commit, так как он нам нужен в нашем случае.
Скопируйте файл post-commit.tmpl в post-commit в том же каталоге хуков и дайте post-commit права на выполнение.
cp -v /usr/local/subversion/repository/hooks/post-commit.tmpl /usr/local/subversion/repository/hooks/post-commitchmod +x /usr/local/subversion/repository/hooks/post-commitТеперь отредактируйте скрипт post-commit и закомментируйте следующие две строки внизу, и добавьте следующую строку к нему.
#commit-email.pl "$REPOS" "$REV" [email protected]
#log-commit.py --repository "$REPOS" --revision "$REV"
/usr/bin/svn update /usr/local/apache2/htdocs/ >> /usr/local/subversion/repository/logs/post-commit.logПосле этого создайте новую папку logs в /usr/local/subversion/, чтобы мы могли включить ведение журнала, и создайте пустой файл post-commit.log.
mkdir -v /usr/local/subversion/repository/logs/touch /usr/local/subversion/repository/logs/post-commit.logЕще раз, нам нужно убедиться, что папка репозитория имеет правильное владение пользователем, рекомендуется установить владение на /usr/local/subversion/repository/ для пользователя apache.
chown -Rv apache.apache /usr/local/subversion/repository/Если все пройдет хорошо, это должно быть все.
Теперь у вас есть работающий сервер репозитория subversion, готовый к дальнейшим импортам, как только вы запустите сервер apache.
Get new posts in your inbox
No spam. Unsubscribe anytime.