Subversion

Subversion - это система контроля версий с открытым кодом. Используя Subversion вы можете записывать историю исходных файлов и документов. Она управляет файлами и каталогами во времени. Дерево файлов располагается в центральном хранилище. Хранилище больше похоже на обычный файл-сервер, за исключением того, что он помнит каждое изменение когда-либо сделанное в файлах или каталогах.

Установка

Для доступа к хранилищу Subversion с помощью протокола HTTP вы должны установить и настроить web сервер. Apache2 гарантированно работает с Subversion. Пожалуйста, обратитесь к разделу Apache2 для установки и настройки Apache2. Для доступа к хранилищу Subversion по протоколу HTTPS вам потребуется установить и настроить цифровой сертификат для вашего Apache2 сервера. Пожалуйста, обратитесь к подразделу HTTPS в разделе по Apache2 для установки и настройки цифрового сертификата.

Для установки Subversion выполните следующую команду в терминале:

sudo apt-get install subversion libapache2-svn

Настройка сервера

Этот шаг подразумевает, что вы уже установили упоминавшиеся выше пакеты на вашей системе. В этом разделе описывается как создать хранилище Subversion и получить доступ к проекту.

Создание хранилища Subversion

Хранилище Subversion может быть создано с помощью следующей команды в терминале:

svnadmin create /path/to/repos/project

Импортирование файлов

После того, как вы установили хранилище, вы можете импортировать в него файлы. Для импорта каталога, ведите следующее в терминале:

svn import /path/to/import/directory file:///path/to/repos/project

Методы доступа

Хранилище Subversion может быть доступно множеством различных способов - на локальном диске или через различные сетевые протоколы. Однако, размещение хранилища - это всегда url адрес. Таблица описывает как различные URL схемы связаны с возможными методами доступа.

Методы доступа
Схема Метод доступа
file:// Прямо доступ к хранилищу (на локальном диске)
http:// Доступ через протокол WebDAV к web-серверу Apache2, настроенному на Subversion
https:// То же самое, что и http://, но с использованием шифрования SSL
svn:// Доступ через собственный протокол к серверу svnserve
svn+ssh:// То же самое, что svn://, но через туннель SSH

В этом разделе мы рассмотрим как настроить Subversion для всех этих методов доступа. Здесь мы рассмотрим основное. Для более продвинутого использования, обратитесь к книге svn book.

Прямой доступ к хранилищу (file://)

Это самый простой из всех методов доступа. Он не требует запуска какого-либо сервера Subversion. Этот метод используется для доступа к Subversion на этой же машине. Синтаксис команды, вводимой в терминале, аналогичен следующему:

svn co file:///path/to/repos/project

или

svn co file://localhost/path/to/repos/project
Если вы не указываете сетевое имя, требуется три прямых слеша в начале адреса (///) - два для обозначения протокола (в данном случае - file), плюс лидирующий слеш базового каталога. Если вы указываете сетевое имя, вы должны указать два слеша (//).

Права доступа к хранилищу определяются правами файловой системы. Если пользователь имеет право на чтение/запись, он может получить содержимое хранилища и внести изменения.

Доступ через протокол WebDAV (http://)

Для доступа к хранилищу Subversion через протокол WebDAV вам потребуется настроить сервер Apache2. Добавьте следующий фрагмент между элементами <VirtualHost> и </VirtualHost> в /etc/apache2/sites-available/default или иной VirtualHost файл:

 <Location /svn>
  DAV svn
  SVNPath /home/svn
  AuthType Basic
  AuthName "Your repository name"
  AuthUserFile /etc/subversion/passwd
  Require valid-user
 </Location> 
Фрагмент конфигурации выше предполагает, что хранилища Subversion созданы в каталоге /home/svn/ с использованием команды svnadmin. Они могут быть доступны по адресу http://hostname/svn/repos_name.

Для импорта или фиксации файлов в вашем Subversion хранилище по HTTP, хранилищем должен владеть HTTP пользователь. В Ubuntu системах обычно пользователем HTTP является www-data. Для изменения владельца файлов хранилища введите следующую команду в терминале:

sudo chown -R www-data:www-data /path/to/repos
Изменяя владельца хранилища на www-data вы не позволите импортировать или фиксировать файлы внутри хранилища командой svn import file:/// любому пользователю кроме www-data.

Далее вы должны создать файл /etc/subversion/passwd, который будет содержать подробности аутентификации пользователей. Для создания файла используйте следующую команду в командной строке (которая создаст файл и добавит первого пользователя):

sudo htpasswd -c /etc/subversion/passwd user_name

Чтобы добавить дополнительных пользователей, опустите опцию "-c", поскольку она заменяет старый файл. Вместо этого используйте такой вариант:

sudo htpasswd /etc/subversion/passwd user_name

Эта команда запросит у вас ввод пароля. Как только вы введете пароль, пользователь будет добавлен. Теперь для доступа к хранилищу вы можете выполнить следующую команду:

svn co http://servername/svn
Пароль передается открытым текстом. Если вы беспокоитесь о перехвате пароля, в стоит использовать шифрование SSL. Детали смотрите в следующей части.

Доступ по протоколу WebDAV с шифрованием SSL (https://)

Доступ к хранилищу Subversion по протоколу WebDAV с SSL шифрованием (https://) аналогичен http:// за исключением что вы должны установить и настроить цифровой сертификат для вашего Apache2 сервера. Для использования SSL с Subversion добавьте конфигурацию приведенную выше в файл /etc/apache2/sites-available/default-ssl. Для дополнительной информации по установке Apache2 с SSL смотрите настройку HTTPS.

Вы можете установить цифровой сертификат, выпущенный центром сертификации. В качестве альтернативы можно использовать самоподписанный сертификат.

Эта часть подразумевает, что вы установили и настроили цифровой сертификат в вашем сервере Apache2. Теперь чтобы получить доступ к хранилищу Subversion смотрите предыдущий раздел. Метод доступа практически тот же самый, за исключением протокола. Вы должны использовать https:// для доступа к хранилищу Subversion.

Доступ через собственный протокол (svn://)

Как только создано хранилище Subversion, вы можете настроить контроль доступа. Вы можете отредактировать файл /path/to/repos/project/conf/svnserve.conf для изменения контроля доступа. Например, для установки авторизации вы можете раскомментировать следующие строки в файле конфигурации:

# [general]
# password-db = passwd

После снятия знака комментария (#) с этих строк, вы можете поддерживать список пользователей в файле passwd. И так, редактируйте файл passwd в этом же каталоге и добавляйте новых пользователей. Синтаксис должен быть таким:

username = password

Более подробно смотрите комментарии в самом файле.

Теперь, чтобы подключиться к Subversion через собственный протокол svn://, с этой же машины или другой, вы можете запустить svnserver с помощью команды svnserve. Синтаксис следующий:

$ svnserve -d --foreground -r /path/to/repos
# -d - режим сервиса
# --foreground - запуск в фоновом режиме (полезно при отладке)
# -r - корневой каталог для обслуживания
Больше деталей по использованию можно посмотреть, выполнив команду:
$ svnserve --help

Как только вы выполните указанную команду, Subversion запустится на порту по умолчанию (3690). Для доступа к хранилищу проектов вам потребуется выполнить следующую команду из терминала:

svn co svn://hostname/project project --username user_name

Основываясь на конфигурации сервера, у вас будет запрошен пароль. После аутентификации будет проверен код из хранилища Subversion. Для синхронизации проекта из хранилища с локальной копией вам потребуется выполнить подкоманду update. Синтаксис команды, вводимой в терминале следующий:

cd project_dir ; svn update

Для подробной информации о каждой подкоманде Subversion вы можете обратиться к встроенному руководству. Например, чтобы узнать больше о команде co (checkout) выполните следующую команду в терминале:

svn co help

Доступ по собственному протоколу с SSL шифрованием (svn+ssh://)

Настройка и работа сервера такая же, как при svn:// методе. Детали описаны в предыдущей части.Этот шаг предполагает, что вы следовали инструкциям предыдущей части и запустили сервер Subversion с помощью команды svnserve.

Также предполагается, что у вас на машине запущен сервер ssh и он разрешает входящие соединения. Для проверки, пожалуйста, попробуйте войти на машину с использованием ssh. Если вам удалось соединиться, все замечательно. Если соединиться не получилось, обратитесь к данной проблеме, прежде чем следовать дальше.

Протокол svn+ssh:// используется для доступа к хранилищу Subversion с использованием SSL шифрования. Данные передаются шифрованными с использованием этого метода. Для доступа к проекту в хранилище (например, с командой checkout) вам нужно использовать следующую команду:

svn co svn+ssh://hostname/var/svn/repos/project
Вы должны использовать полный путь (/path/to/repos/project) для доступа к хранилищу Subversion при этом методе подключения.

Основываясь на настройках сервера, будет запрошен пароль. Вы должны будете ввести пароль, который используете при доступе через ssh. После аутентификации команда проверит код из хранилища Subversion.