Установка пакетов
Так как сейчас у большинства стоит бубунта её и возьмем за основу. Поставим для начала клиент для svn:
$sudo apt-get install subversion
Будем делать доступ к SVN через apache. Поставим еще пакет:
$sudo apt-get install libapache2-svn $sudo /etc/init.d/apache2 restart
Создание репозитория
У нас есть поддержка SVN в apache2. Настроим какой нибудь репозиторий.
Попробуем создать каталог, который у нас будет являтся репозиторием.
$sudo mkdir -p /opt/svn/test1
затем нужно сделать его репозиторием командой "svnadmin create":$sudo svnadmin create /opt/svn/test1/теперь в каталоге /opt/svn/test1 находится наш репозиторий (чистый). По правильному этому каталогу и всему содержимому нужно присвоить владельца и группу от которых работает апач, но что б не морочить голову, сделаем проще:
$sudo chmod -R 777 /opt/svn/test1
(Для тех кто забыл: коммандой chmod -R 777 ... мы присваем каталогу и всем его файлам режим на чтение/запись/исполнение - для всех)
Прописываем репозиторий в apache2
Далее... нам нужно прописать этот репозиторий к нашему хосту, если у вас есть настроенные виртуальные хосты, выбираете нужный вам и правите, все остальные правят /etc/apache2/sites-available/default, добавляем в самом конце:
.... <Location /svn/test1> DAV svn AuthType Basic Require valid-user AuthUserFile /opt/svn/passwords AuthName "svn::test1" SVNPath /opt/svn/test1/ AuthzSVNAccessFile /opt/svn/test1/conf/authz </Location> </VirtualHost>
По порядку что мы сделали:
В тэге Location мы указываем на какой адрес будет отвечать наш svn репозиторий, в данном примере http://127.0.0.1/svn/test1.
AuthUserFile путь к файлу паролей (мы его чуть ниже создадим)
AuthName что пользователю выводить когда запрашиваем пароль, тут можно писать например "mega secret project"
SVNPath где находится репозиторий
AuthzSVNAccessFile правила доступа к репозиторию
Едем дальше... нам нужно создать файл паролей, можно конечно создавать для каждого репозитория отдельно, но как по мне это глупо. Лучше создать 1 файл для всех svn репозиториев (если у вас их предвидется много) и если кто-то из пользователей забыл пароль - изменить его в одном месте будет проще. Для создания пароля заходим в каталог /opt/svn и с помощью htpasswd создаем нужный файл.
$cd /opt/svn
$sudo htpasswd -cb passwords user1 qwerty
Естественно логин и пароль заменить на свои.Если нужно еще кого либо добавить, пишем:
$sudo htpasswd -b passwords user2 asdf
файл паролей есть, переходим к правилам доступа:
$cd /opt/svn/test1/conf/по умолчанию этот файл содержит уже пример конфигурации, но мы создадим такой:
[/]
user1=rw
user2=r
собственно тут мы указали что user1 - может и писать и читать, а пользователь user2 - может только читать. С помощью этого файла можно "гибко" разграничивать людей на группы, давать доступ только к части репозитория.
Небольшая ремарка
Представим себе ситуацию, есть проект, есть владелец проекта god и 2 подчиненных: user1 и user2. Задачи user1 и user2 в поддержке и внесении изменений в проект, но отвечает за все эти изменения god. Нужно сделать так, что бы в /trunk мог писать только god, а в ветки - сотрудники. Пишем файл доступа:
[/] god=rw user1=r user2=r [/branches] user1=rw user2=rwТеперь предположим god дает задание:
user1 - сделать задание1, а user2 должен сделать задание2. Каждый из них создает себе ветку в /branches. При создании ветки, они полностью по сути копируют текущее состояние /trunk, например:
user1 -> /branches/1user_001
user2 -> /branches/2user_001
и ведут свою разработку, комитят скока угодно раз.
1. они не мешают друг другу
2. если зашли в тупик или как часто бывает "не знаю из-за чего не компилится" прибивается ветка и создается другая и вней ведется разработка задачи сначала - не трогая основной проект.
как только допустим user2 закончил работу, он сообщает god'у что работа сделана, god через IDE или консольными командами может сделать merge в /trunk из ветки /branches/2user_001, причем перед тем как вносить изменения в /trunk - он может просмотреть "все изменения" которые внес user2. Затем если все впорядке - делает коммит /trunk ветки, если нет может откатить эти изменения.
Допустим все хорошо, и в /trunk обновлены данные. Теперь user1'у говорят: "обновись из /trunk'а тут много изменений", он делает merge из /trunk в /branches/1user_001, после этого в его ветке будут изменения из /trunk и те которые он до этого написал. Когда он закончит работу - сценарий выше.
Возможна ситуация когда 2 и более программиста будут работать в одной ветке - это тоже никак не противоречит системе. Т.е. вариантов использования ОЧЕНЬ много.
Пробуем запускать.
$sudo /etc/init.d/apache2 restartдля проверки, открываем браузер и вводим:
http://127.0.0.1/svn/test1 вводим логин и пароль который создавали и должны увидеть что-то вроде:
test1 - Revision 0: / Powered by Subversion version 1.6.5 (r38866).если нет, смотрим ошибки апача.
Комментариев нет:
Отправить комментарий