SVN - SubVersion: различия между версиями

Материал из AlexNook
Перейти к навигацииПерейти к поиску
Строка 109: Строка 109:


{{Root|/etc/init.d/apache2 restart}}
{{Root|/etc/init.d/apache2 restart}}
==Использование SVN как standalone сервиса==
вы


==Перенос репозитария на другую машину==
==Перенос репозитария на другую машину==

Версия 08:16, 1 февраля 2014

SubVersion Logo

Subversion - Sub (под-) + version (версия). В то же время, subversion — свержение. Cвободная централизованная система управления версиями.

Subversion разработана специально для замены устаревшей системы CVS, распространённой открытой системы управления версиями. Subversion обладает всеми основными функциями CVS (хотя некоторые из них выполняет другими способами) и свободна от ряда её недостатков.

Установка в Gentoo

Первым делом сверяем USE флаги

Note: Если каких-то флагов не хватает, то можно выполнить команду
echo "dev-vcs/subversion use-flag" >> /etc/portage/package.use

Use Flags: apache2 berkdb nls python bash-completion webdav-neon -debug -doc -emacs -extras -java -ctypes-python -perl -gnome-keyring -kde -sasl -test -webdav-serf -ruby -dso -vim-syntax (?)

, а потом как всегда выполняем:

emerge subversion

Таким образом мы установили SVN. Важно отметить, что флаг apache2 был выбран для того, чтобы была возможность загрузить модуль SVN в apache web server и использовать этот веб сервер для доступа к репозитарию по протоколу httpS.

Затем делаем автоконфигурацию SVN

emerge --config

Конфигурирование для работы с apache

Далее в файле конфигурации апача /etc/conf.d/apache2 надо чтобы было прописано

File: /etc/conf.d/apache2
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D LANGUAGE -D SSL -D SSL_DEFAULT_VHOST -D PHP5 -D SVN -D SVN_AUTHZ -D DAV -D DAV_FS"

Важно обратить внимание на опции -D SVN -D SVN_AUTHZ -D DAV где SVN и DAV нужны для доступа к репозитарию через веб сервер, а SVN_AUTHZ позволяет более гибко настроить права пользователей при работе с репозитарием (кому писать, кому читать и т.д.). Другие опции апача добавились после установки php и т. д.. Так что это всего лишь ориентир на то, что должно быть прописанно в файле. Это те опции, с которыми будет запускаться наш apache.

Настройка доступа к SVN по SSL

Для возможности использования СВН только по протоколу https необходимо сделать следующее:

Переименовать файл 47_mod_dav_svn.conf в 47_mod_dav_svn.ssl-conf.

Далее в файл 40_mod_ssl.conf добавляем в конец следующее:

Code: Строки кода для вставки в файл
Include /etc/apache2/modules.d/*.ssl-conf 
BrowserMatch "SVN" redirect-carefully

и получаем вот такое:

File: 40_mod_ssl.conf
SSLMutex  file:/var/run/ssl_mutex

Include /etc/apache2/modules.d/*.ssl-conf 
BrowserMatch "SVN" redirect-carefully
</IfDefine>
# vim: ts=4 filetype=apache


Первая строка добавляет возможность при использовании SSl подгружать файл с конфигурациями СВН (мы его переименовали в 47_mod_dav_svn.ssl-conf). А вторая строка нужная т.к. мы ужесточаем авторизацию ТОЛЬКО по SSL.

Создание репозитария

Для создания репозитария сперва нужно дать о нём знать веб серверу apache и обозначить основные параметры работы с ним, а потом собственно создать сам этот репозитарий. Для это сперва нам нужноп поправить /etc/apache2/modules.d/47_mod_dav_svn.ssl-conf (переименованный нами ранее файл), а именно добавить в него вот такой кусочек кода (по аналогии)

File: /etc/apache2/modules.d/47_mod_dav_svn.ssl-conf
        <Location /svn/16cla>
                DAV svn
                SVNPath /var/svn/16cla
                AuthType Basic
                AuthName "16CLA repository"
                AuthUserFile /var/svn/16cla/conf/svnpasswd
               #<LimitExcept GET PROPFIND OPTIONS REPORT>
                Require valid-user
               #</LimitExcept>
                SSLRequireSSL
        </Location>

Где закомментированные строки разрешают читать СВН анонимам, но писать туда можно только после прохождения авторизации по SSL, а 16CLA - это пример названия репозитария.

Далее командой

svnadmin create /var/svn/16cla

создаём новый репозитарий. Она создаёт следующие пути и файлы:

conf/ dav/ db/ format hooks/ locks/ README.txt

  • Потом создаём файл /var/svn/srach/conf/svnpasswd с содержимыми паролей и логинов (sha)
Можно воспользоваться ссылкой или утилитой htpasswd.exe (не уверен что правда она ша держит) – как пример строка из этого файла alex:{SHA}YMbSd6i9gd5/3eGSAb+cWKPfCPQ=
Note: Можно дать следующую команду
htpasswd -c -s /var/svn/ibm/conf/svnpasswd andy
, которая создаст файл svnpasswd (опция ), с алгоритмом SHA1 (опция -s) и занесёт в него имя andy. Пароль программа попросит ввести в консоль и повторить.
  • Даём права на запись апачу
    chown -R apache:apache /var/svn/16cla/
  • Далее рестартим апач
  • Конектиться к репозитарию можно по адресу https://host.domain:port/svn/repos

Как пример https://srach.no-ip.org/svn/16cla/.

Путь к SVN выглядит как: /usr/bin.

Линковка репозитария и веб директории

При разработке веб приложений иногда полезно синхронизировать сожержимое репозитария и веб директории. Для этого выполняем:

Создаём скрипт в файл /var/svn/srach/hooks/post-commit. И добавляем в него следующее:

nano -w /var/svn/srach/hooks/post-commit
File: /var/svn/srach/hooks/post-commit
#!/bin/sh
svn --username user --password parol --force export http://donik.org/svn/16cla/ /var/www/16cla/htdocs/

Пример приведён для репозитария 16cla и одноимённой веб директории.

Далее даём права на этот файл на выполнение

chmod 755 post-commit

Рестарт Apache2

Т.к. SVN стоит в виде модуля апача, то для вступления в силу каких-либо изменений необходимо рестартить апач.

/etc/init.d/apache2 restart

Использование SVN как standalone сервиса

вы

Перенос репозитария на другую машину

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

Соответственно для создания дампа всего репозитария выполняем команду:

svnadmin dump /var/svn/coding/ > /home/alex/repository-backup.dmp

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

Затем, при восстановлении репозитария, мы должны выполнить следующую команду:

svnadmin load repository-name < /path/to/repository-name.dmp

При условии, что у анс существует репозитарий с именем repository-name, а так же мы находимся в той папке, где он непосредственно находится. Например:

svnadmin load /var/svn/coding/ < /home/alex/repository-backup.dmp

Стоит отметить, что дынный метод очень кросплатформенный в отличие от простого копирования файлов или замена их из архива. Таким образом можено перенести репозитарий из Linux в Windows.

Удаление SVN репозитария

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

Например для удаления всего репозитария надо ввести команду:

rm -r /var/svn/coding/

И не забываем подчистить конфиг от нашего описания репозитария: /etc/apache2/modules.d/47_mod_dav_svn.ssl-conf

Ссылки

  1. Официальный сайт Subversion
  2. The Risks of Distributed Version Control Бен Коллинз-Сассман
  3. более подробно об SVN читаем вот тут
  4. SVN Basics - Gentoo-Wiki
  5. Перенос репозитария с одного места в другое.
  6. htpasswd

BackUPs

  1. Gentoo Wiki - HOWTO Apache2 web server with subversion SVN and DAV