Перевод сборника команд Unix ToolBox. Часть 16 SVN

339

Если вы занимаетесь программированием, созданием интернет магазинов или других проектов, то наверняка знаете, как бывает полезно следить за ходом работы путем выпуска промежуточных версий продуктов. Более того, практически все программы и библиотеки имеют версии, что помогает и разработчику и пользователю определить наиболее свежий продукт. Но этот процесс нужно систематизировать. Именно для управления версиями и создан SVN, о котором пойдет речь в 16 части перевода ?сборника команд Unix ToolBox.

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

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

Поднять SVN репозитарий довольно просто, в данном примере, директория, /home/svn/, должна существовать:

# svnadmin create —fs-type fsfs /home/svn/project1

Подключиться к репозитарию можно следующими способами:

  • file:// — Прямой доступ через файловую систему с помощью SVN клиента. В локальной файловой системе должны быть корректно настроены привилегии.
  • svn:// или svn+ssh:// — Удаленный доступ к SVN серверу (так-же по протоколу SSH). Требуются права в локальной файловой системе, порт по-умолчанию: 2690/tcp.
  • http:// Удаленный доступ через webdav, используя apache. Для данного метода не требуется наличие локальных пользователей.

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

# 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 # Только для контроля доступа
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

Сервер Apache должен иметь полный доступ к репозитарию:

# chown -R www:www /home/svn

Создание пользователя с помощью htpasswd:

# htpasswd -c /etc/svn-passwd user1 # -c Создать файл
Контроль доступа svn.acl, пример
# По-умолчанию доступ на чтение. «* =» по-умолчанию не будет иметь доступа
[/]
* = r
[groups]
project1-developers = joe, jack, jane
# Дать права на запись разработчикам
[project1:]
@project1-developers = rw
Некоторые команды для управления SVN репозитарием

Смотрите так-же Subversion Quick Reference Card. 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 # Удалить файлы