При работе хотя бы двух людей над одним проектом уже более остро встают проблемы совместной работы над одним файлом, откат к предыдущей версии или сравнение с предыдущей версией документа. Существуют различные программные средства чтобы автоматизировать этот процесс и не заставлять вас создавать при изменении файла резервные копии вручную. Одним из таких средств является система контроля версий SVN.
При создании веб-проектов возникает потребность создать хранилище файлов с контролем версия прямо в глобальной сети, чтобы несколько разработчиков, которые находятся в разных уголках нашей планеты могли использовать его.
Возможно при первом знакомстве с SVN не особо удобно будет управлять такими вещами из консоли по SSH. Давайте разберемся как это сделать проще.
Что нам требуется?

  • Создать пользователей
  • Создать хранилище
  • Назначить пользователям права
  • Опробовать доступность репозитория в сети

Существует простой в использовании и интуитивно понятный инструмент для выполнения первых трех пунктов.
Этот инструмент называется svnmanager. Представляет он собой web-приложение (напор php-скриптов), которое предоставляет графический интерфейс для создания хранилищ, пользователей и назначения прав последним.
Установить это приложение можно либо из репозиториев пакетов вашего дистрибутива, либо скачав с официального сайта svnmanager. Установите его. Если вы хотите установить не с помощью менеджера пакетов, а вручную, то расположите скрипты в папке /srv/www/htdocs/svnmanager, таким образом, чтобы Apache отдавал его по запросу из браузера https://localhost/svnmanager (или IP-адрес или доменное имя, если вы устанавливаете в web).
По умолчанию svnmanager настроен на работу с СУБД sqlite. Но вы можете исправить это и использовать mysql. Так или иначе вам придется открыть конфигурационный файл /srv/www/htdocs/svnmanager/config.php. В нем следует исправить строку, которая содержит настройки подключения к БД.

$dsn = 'mysql://yourlogin:yourpassword@localhost/svnmanager';

В конфиге так же имеются пути по которым будут расположены папка с репозиториями и файлы для разграничения доступа.

//Subversion locations
$svn_repos_loc 				= 	"/srv/www/repos";
$svn_passwd_file 			= 	"/srv/www/repos/passwdfile";
$svn_access_file 			= 	"/srv/www/repos/accessfile";

Далее следует создать базу данных svnmanager и обратиться к приложению в браузере по адресу https://localhost/svnmanager. Приложение сообщит, что таблиц нет и создаст их. Далее перезагрузите страничку и вы увидите, что svnmanager готов к работе. Временные пароль и имя для входа указаны в конфигурационном файле и обычно это admin admin.

//Administrator account
$admin_name				=	"admin";
$admin_temp_password			=	"admin";

Войдите и создайте первого пользователя.
Теперь вы можете войти под ним и создать первый репозиторий. Путь он будет называться firstrepo. svnmanager расположит его в папке firstrepo, которая будет находиться в директории, указанной у вас в переменной $svn_repos_loc конфигурационного файла.
У вас есть репозиторий, но пока что вы не можете обратиться к нему по http. Нам следует настроить Apache.
Для этого отредактируем файл /etc/apache2/httpd.conf. Добавим в конец файла следующие строки:

# Subversion SVN
<Location /svn>
  DAV svn
  SVNListParentPath on
  SVNParentPath /srv/www/repos
#  SVNIndexXSLT "/svnindex.xsl"
  AuthType Basic
  AuthName "Local subversion repositories"
  AuthUserFile /srv/www/repos/passwdfile
  AuthzSVNAccessFile /srv/www/repos/accessfile
  Require valid-user
</Location>

Параметры Apache для настройки http-доступа к репозиторию

Настройка Пояснение
<Location /svn> Означает, что хранилища Subversion доступны по URL https://YourServerName/svn/
DAV svn Сообщает Apache, какой модуль будет ответственен за обслуживание этого URL, - в данном случае модуль Subversion.
SVNListParentPath Для Subversion версии 1.3 или более новой, это указание разрешает выдавать перечень всех доступных хранилищ в папке SVNParentPath.
SVNParentPath предписывает Subversion искать хранилища в данной папке
SVNIndexXSLT Используется для того, чтобы просмотр через веб-обозреватель выглядел более симпатично.
AuthType Basic Для включения базовой аутентификации, т.е. имя_пользователя/пароль
AuthName Используется как информация для пользователя в диалоге аутентификации, сообщая, для доступа к какой области требуется эта аутентификация
AuthUserFile Указывает, какой файл паролей использовать при аутентификации
AuthzSVNAccessFile Расположение файла доступа для путей внутри хранилища Subversion
Require valid-user Предписывает, что только пользователям, предоставившим правильные имя_пользователя/пароль, будет разрешён доступ к URL


Теперь перезапустите Apache

/etc/init.d/apache2 restart

На этом этапе все уже должно работать и мы можем протестировать это. Для этого откроем в браузере адрес https://localhost/svn/firstrepo (вместо localhost можете использовать адрес того сайта, для которого вы устанавливали репозиторий). Если браузер запросит у вас пароль и логин, то значит мы все сделали верно. Если после ввода правильных пароля и логина браузер показывает ошибку Apache, то возможно у ваших файлов /srv/www/repos/passwdfile и /srv/www/repos/accessfile стоит запрет на чтение. Исправьте ситуацию.
При отсутствии каких-либо проблем вы увидите, что вы в хранилище.

Tags: ,

12 Responses to “Создание и настройка SVN-репозитория в Linux”

  1.  Valentin Says:

    Большое спасибо за статью, давно искал как настроить веб интерфейся для SVN. Будут еще статьи по теме? Например интеграция с популярными IDE, как работать с контролем версий и тд и тп.

  2.  Игорь Тельменко Says:

    Спасибо за feedback, Valentin! Обратная связь очень важна, так как позволяет видеть в правильном-ли направлении я работаю, интересен-ли материал людям и что бы они хотели здесь прочитать.
    Я давно подумывал написать про использование SVN и про интеграцию с IDE. Поэтому как бы в бонус за то, что вы откликнулись, я напишу небольшую статью на эту тему в ближайшие несколько дней. Она появится в разделе SVN.
    Вы можете воспользоваться формой подписки на email (справа, под меню сайта) чтобы не пропустить эту и другие интересные статьи.
    Форма подписки добавлена недавно. Дайте, пожалуйста, мне знать, если вдруг она будет работать неверно (например, вам не придет ссылка для подтверждения подписки).

  3.  maincode.ru Says:

    всем привет. у меня не получается настроить subversion ((
    при попытке открыть https://localhost/svnmanager выдает ошибку
    ПОдскажите плиз в чем проблема ))

    Fatal Error

    [2] mysql_connect() [function.mysql-connect]: Lost connection to MySQL server at \’reading initial communication packet\’, system error: 111 (@line 340 in file /home/webmaster/www/maincode.ru/svnmanager/prado-2.0.3/framework/Data/adodb/drivers/adodb-mysql.inc.php).
    Debug Backtrace

  4.  Игорь Тельменко Says:

    Наверное проблема с настройками в /srv/www/htdocs/svnmanager/config.php.
    Там настройки подключения к БД.
    Mysql вообще у вас работает?

  5.  maincode.ru Says:

    Mysql работает, у меня хостинг в котором уже все установлено и настроено по умолчанию. Мне только не понятно какие логин и пароль нужно указать в файле config.php

  6.  Игорь Тельменко Says:

    Необходимо указать логин и пароль к mysql. Их можно уточнить у вашего хостера.
    Так же вам необходимо создать новую базу данных с именем svnmanager. Это можно сделать через phpMyAdmin, например. :)

  7.  maincode.ru Says:

    я все понял, спасибо )

  8.  Алексей Says:

    на фре из портов втри строчки любой пакет ставиться как его на линукс ето накатить то

  9.  Игорь Тельменко Says:

    На Линуксе из репозиториев - в одну строчку. :)

  10.  Александр Says:

    При открытии главной страницы показывает пустую страницу. Подскажите лиз в чем может быть проблема

  11.  Игорь Тельменко Says:

    Посмотрите логи Апача. Возможно там кроется ответ

  12.  Александр Says:

    Спасибо. Нашелся :)