При разработке программного обеспечения командой программистов для синхронизации вносимых в проект изменений удобно использовать какое-либо централизованное хранилище с возможностью управления версиями.
Одной из самых популярных систем управления версиями является Subversion, также известная как SVN, обладающая широким функционалом и очень простая в использовании. Далее будет показано, как настроить SVN-хранилище на сервере под управлением Debian.
Подробнее начальные условия:
- хостинговый сервер под управлением Debian Lenny (на нём работает веб-сервер apache2 с поддержкой php5);
- организация, разрабатывающая проекты project1 и project2;
- разработчики user1 и user2, работающие над проектом project1, user3 и user4 работающие над проектом project2;
- исходный код проектов открыт и получить его может любой желающий, но вносить изменения могут только их разработчики.
Собственно задача:
- Добавить на хостинговый сервер вирутальный хост «svn.mega-soft.dom».
- Настроить этот виртуальный хост для работы в качестве SVN-репозитория.
- Раздать пользователям права на проекты в соответствии с тем, кто над каким проектом работает.
Приступаем к решению задачи. Для начала установим необходимые пакеты:
apt-get install subversion-tools libapache2-svn
Создадим директорию, где мы будем хранить наши репозитории:
mkdir -p /var/lib/svn
Создадим репозитории:
svnadmin create /var/lib/svn/project1 svnadmin create /var/lib/svn/project2
Поскольку веб-сервер в Debian и производных от него дистрибутивах работает с правами пользователя www-data, и этот пользователь должен иметь возможность писать в директории с репозиториями, сменим владельца директории с репозиториями на пользователя www-data:
chown -vR www-data:www-data /var/lib/svn
Создадим (пока) пустые файлы паролей для наших репозиториев:
touch /var/lib/svn/{project1,project2}.htpasswd
Создадим директорию, которая будет корнем нового виртуального хоста (репозитории должны быть за пределами этой директории!):
mkdir -p /var/www/svn.mega-soft.dom
Теперь создадим файл «/etc/apache2/sites-available/svn.mega-soft.dom», описывающий наш виртуальный хост:
<VirtualHost *:80> # e-mail администратора: ServerAdmin webmaster@ylsoftware.com # Имя виртуального хоста: ServerName svn.mega-soft.dom # Дополнительное имя виртуального хоста: ServerAlias www.svn.mega-soft.dom # Кодировка виртуального хоста: AddDefaultCharset utf-8 # Корневая директория виртуального хоста: DocumentRoot /var/www/svn.mega-soft.dom # Разрешения на корневую директорию сервера: <Directory /> Options FollowSymLinks AllowOverride All </Directory> # Опции корневой директории виртуального хоста: <Directory /var/www/svn.mega-soft.dom> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> # Настройки репозитория для project1: <Location /project1> # Включаем для этой директории модуль svn: DAV svn # Указываем путь к репозиторию: SVNPath /var/lib/svn/project1 # Используем базовую авторизацию: AuthType Basic # Заголовок запроса данных для авторизации: AuthName "Subversion Repository" # Файл с паролем: AuthUserFile /var/lib/svn/project1.htpasswd # Для определённых методов доступа требуем авторизацию: <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location> # Настройки репозитория для project2: <Location /project2> # Включаем для этой директории модуль svn: DAV svn # Указываем путь к репозиторию: SVNPath /var/lib/svn/project2 # Используем базовую авторизацию: AuthType Basic # Заголовок запроса данных для авторизации: AuthName "Subversion Repository" # Файл с паролем: AuthUserFile /var/lib/svn/project2.htpasswd # Для определённых методов доступа требуем авторизацию: <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location> # Файлы логов: ErrorLog /var/log/apache2/error-svn.mega-soft.dom.log LogLevel warn CustomLog /var/log/apache2/access-svn.mega-soft.dom.log combined </VirtualHost>
Далее нам нужно разрешить использование этого виртуального хоста веб-сервером и перезапустить его:
a2ensite svn.mega-soft.dom && invoke-rc.d apache2 reload
Добавим пользователей в файлы паролей с помощью утилиты htpasswd:
htpasswd /var/lib/svn/project1.htpasswd user1 htpasswd /var/lib/svn/project1.htpasswd user2 htpasswd /var/lib/svn/project2.htpasswd user3 htpasswd /var/lib/svn/project2.htpasswd user4
При открытии страницы «http://svn.mega-soft.dom/» вы не увидите ничего, однако, при обращении к «http://svn.mega-soft.dom/project1» и «http://svn.mega-soft.dom/project2» вы сможете увидеть файлы и папки, находящиеся в репозиториях проектов proeject1 и project2 соответственно.
Всё! Теперь любой желающий может получить копии проектов используя команды:
svn checkout http://svn.mega-soft.dom/project1 /path/to/projects/project1 svn checkout http://svn.mega-soft.dom/project2 /path/to/projects/project2
Разработчики проекта могут заливать изменения используя примерно такую команду:
svn commit /path/to/projects/project1 --username user1
На этом всё. Успехов в работе над проектами!
P.S. Отдельное спасибо Фроловой Марии за корректировку статьи.
Anonymous 2009-09-23 16:32:05 (#)
До этого хранил только локальные репозитории в file:// а теперь попробую и такой вариант.