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/repository
conf/  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 стандартные папки.

branches
tags
trunk

Для создания этих стандартных папок в репозитории создайте временную папку в любом месте, где вы хотите, /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.tmpl
post-lock.tmpl            pre-commit.tmpl           pre-unlock.tmpl
post-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-commit
chmod +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.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.