Оглавление

SVN

Server setup | SVN+SSH | SVN over http | SVN usage

Subversion (SVN - Concurrent Versions System), централизованная система управления версиями. Разработана в качестве замены для CVS, имеет тот-же функционал, однако лишена многих ее недостатков.
Смотри так-же: SVN book.

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

Поднять SVN репозитарий довольно просто, в данном примере, директория, /home/svn/, должна существовать:
# svnadmin create --fs-type fsfs /home/svn/project1
Подключиться к репозитарию можно следующими способами: Импорт и проверка существующего проекта через локальную ФС. В рабочую директорию заходить не обязательно, можно просто указать полный путь:
# svn import /project1/ file:///home/svn/project1/trunk -m 'Initial import'
# svn checkout file:///home/svn/project1

Удаленный доступ по SSH

Удаленный доступ по SSH не требует каких-то доаолнительных настроек, просто замените file:// на svn+ssh/hostname. Например:

# svn checkout svn+ssh://hostname/home/svn/project1
Как и в случае локального доступа, пользователь должен иметь аккаунт, для доступа по SSH на сервер, и корректно настроенные права на чтение/запись. Данный метод может быть пригоден для небольших групп пользователей, пользователи входящие в группу, являются владельцами хранилища, например:
# groupadd subversion
# groupmod -A user1 subversion
# chown -R root:subversion /home/svn
# chmod -R 770 /home/svn

Удасенный доступ через HTTP(apache)

Удаленный доступ черз HTTP(HTTPS), подходящее решение для удаленных групп пользователей. Этот метод использует авторизацию веб-сервера Apache(не локальные аккаунты). Вот типичная конфигурация Apache:
LoadModule dav_module         modules/mod_dav.so
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so    # Только для контроля доступа
<Location /svn>
  DAV svn
  # URL "/svn/foo" будет отображен на путь репозитария /home/svn/foo
  SVNParentPath /home/svn
  AuthType Basic
  AuthName "Subversion repository"
  AuthzSVNAccessFile /etc/apache2/svn.acl
  AuthUserFile /etc/apache2/svn-passwd
  Require valid-user
</Location>
Сервер Apache должен иметь полный доступ к репозитарию:
# chown -R www:www /home/svn
Создание пользователя с помощью htpasswd2:
# htpasswd -c /etc/svn-passwd user1  # -c Создать файл

Контроль доступа svn.acl, пример

# По-умолчанию доступ на чтение. "* =" по-умолчанию не будет иметь доступа
[/]
* = r
[groups]
project1-developers = joe, jack, jane
# Дать права на запись разработчикам
[project1:]
@project1-developers = rw

Некоторые команды для управления SVN репозитарием

Смотрите так-же Subversion Quick Reference Cardhttp://www.cs.put.poznan.pl/csobaniec/Papers/svn-refcard.pdf.Tortoise SVN, неплохой Windows интерфейс.

Импорт

Импортировать в репозитарий новый проект, содержащий директории и файлы, можно с помощью команды import. Эта-же команда используется и для добавления директории с ее содержимым в уже существующий проект.
# svn help import                                # Помощь по команде
    # Добавить новую директорию и ее содержимое в директорию src, проекта project1.
# svn import /project1/newdir http://host.url/svn/project1/trunk/src -m 'add newdir'

Типичные команды SVN

# svn co http://host.url/svn/project1/trunk      # Оформить заказ на последнюю версию
    # Тэги и ветки создаются с помощью копирования 
# svn mkdir http://host.url/svn/project1/tags/   # Создать директорию tags
# svn copy -m "Tag rc1 rel." http://host.url/svn/project1/trunk \
                             http://host.url/svn/project1/tags/1.0rc1
# svn status [--verbose]                         # Проверить состояние файлов в рабочей директории
# svn add src/file.h src/file.cpp                # Добавить два файла
# svn commit -m 'Added new class file'           # Закоммитить изменения сообщением
# svn ls http://host.url/svn/project1/tags/      # Список всех тэгов
# svn move foo.c bar.c                           # Переместить (переименовать) файлы
# svn delete some_old_file                       # Удалить файлы

Оглавление