Лабораторная работа 2
"Subversion (SVN)"
Цель – приобрести навыки работы с системой контроля версий "Subversion".
1. Теоретические сведения.
"SVN" – централизованная система для совместного использования информации [1]: файлы (каталоги) хранятся на сервере, тогда на клиентских узлах находятся соответствующие копии. Использование "SVN" дает возможность отслеживать "историю" изменений файлов (каталогов) разработчиками и, в случае необходимости (возникновение ошибок), выполнять "откат" изменений.
Фундаментальные понятия "SVN":
- "Хранилище" (репозитарий) – центр хранения данных (размещено на сервере); информация (файлы и каталоги) представлены в виде древовидной структуры; хранилище можно рассматривать как разновидность файлового сервера;
- "Рабочая копия" – дерево папок на локальной системе, содержащее набор файлов [2]. Рабочую копию можно рассматривать как локальную рабочую область клиента.
- модель "блокирование / изменение / разблокирование" как модель контроля версий – одновременное редактирование файлов несколькими пользователями запрещено;
- модель "копирование / изменение / слияние" как модель контроля версий – на клиентских узлах создаются копии файлов и каталогов, размещенных в хранилище; разработчики одновременно и независимо модифицируют копии, над которыми затем выполняется операция слияния (модифицированные копии замещают в хранилище исходные копии).
Некоторые из возможностей "SVN":
- контроль модификации каталогов – используется виртуальная файловая система, что позволяет отслеживать изменения во времени иерархических структур каталогов;
- метаданные с версиями – файлам (каталогам) ставятся в соответствие множества метаданных, элементы которых есть пары вида "(название, значение)".
Архитектура "SVN" приведена на рис. 1.
Рисунок 1 – Схема взаимодействия компонентов "Subversion"
Прокомментируем программные компоненты:
- "svn.exe" – клиентская программная утилита, предоставляющая интерфейс командной строки;
- "svnadmin.exe" – инструментарий создания, настройки или восстановления хранилища;
- "svnserve.exe" – "легкий" сервер, предоставляющий клиентам возможность взаимодействовать с хранилищем посредством протоколов TCP/IP; клиенты взаимодействуют с сервером используя URL вида "svn://...".
В качестве инструментария, содержащего описанные программные компоненты, может использоваться сборка "CollabNet" ("CollabNetSubversion-client-1.7.8-1-Win32.exe") [3]. Для использования соответствующего набора команд следует добавить путь к установленной сборке в системную переменную "Path".
Характер взаимодействия клиентов с хранилищем задается содержимым конфигурационного файла "svnserve.conf", расположенного в директории "conf" репозитария. Для задания содержимого файла используется следующий набор параметров, приведенный в табл. 1. Схема инициализации параметров следующая: "параметр = значение".
Таблица 1 – Конфигурационные параметры файла "svnserve.conf"
№ |
Параметр |
Описание |
1 |
anon-access |
- задает права доступа для неавторизированных пользователей; - допустимые значения – "read | write | none" (по умолчанию – "read"); |
2 |
auth-access |
- // - для авторизированных пользователей; - // - (по умолчанию – "write"); |
3 |
password-db |
- задает название файла, содержащего строки вида "user_name = password"; |
4 |
authz-db |
- задает название базы данный, содержимое которой позволяет задавать права доступа для групп пользователей; файл с соответствующим названием также расположен в директории "conf"; |
5 |
realm |
- задает область действия групповой политики; - в общем случае значение ставится в соответствие паре (репозитарий, разрабатываемый проект); |
Типичное содержимое файла "svnserve.conf" приведено в листинге 1.
Листинг 1 – Задание политики доступа
[general]
anon-access = write
auth-access = write
password-db = passwd
realm = repository No1
Способы доступа к хранилищу приведены в табл. 2.
Таблица 2 – Описание URL-схем доступа
№ |
Шаблон |
Описание |
1 |
file://
|
- прямой доступ (хранилище размещено на локальном ПК); |
2 |
svn://
|
- доступ посредством специализированного (упрощенного) сетевого "SVN"-протокола к легковесному серверу "svnserve"; |
3 |
svn+ssh://
|
- // - + гарантия безопасности передачи файлов по незащищенной среде; |
4 |
http:// |
- доступ к "SVN"-адаптированному web-серверу "Apache" посредством протокола "WebDAV" – защищенного сетевого протокола поверх "HTTP"; |
5 |
http:// |
- // - + "SSL"-шифрование. |
Замечание: перечисленные выше шаблоны определяют протокол, который будет использоваться для доступа к репозиторию. Стандартной формой записи протокола (знакомой по http://) является <имя_протокола>:// (слешей в конце всегда именно два).
Поскольку изначально SVN был разработан для ОС Unix, в которой корень диска обозначается символом /, при обращении к репозиторию по протоколу file:// путь к папке необходимо начинать указывать с символа / (корень диска). Если папка репозитория находится на другом диске. нежели текущий, то необходимо указать еще и букву диска, например: file:///E:/%PATH%/repo_<<PC_No>>
В лабораторной работе будем использовать первые два способа (табл. 2).
В табл. 3 приведены некоторые из команд для работы с "Subversion".
Таблица 3 – Возможные манипуляции с репозитарием
№ |
Команда |
Назначение, комментарии |
1 |
svnadmin create \ \path\to\repository |
- создание хранилища; |
2 |
svn import <<source>> \ <<destination>> -m \ <<mark>> |
- импортирование файлов (директорий) в хранилище (не копирование, а ассоциирование их с хранилищем); - <<source>> – путь к импортируемому файлу (директорию); - <<destination>> – путь к хранилищу; - <<mark>> – обязательная метка в виде текстовой строки; |
3 |
svn list file:/// \ /path/to/repository |
- просмотр содержимого хранилища (содержимое выводится в виде списка); |
4 |
svnlook tree \ \path\to\repository |
- // - (вывод содержимого в виде древовидной структуры); |
5 |
svnserve –d –r \ \path\to\repository |
- запуск сервера "svnserve" в качестве автономного процесса (-d); - параметр (-r) задает передаваемый путь как "корневой", что впоследствии упрощает формат записи клиентских обращений к хранилищу (пример – следующая команда); |
6 |
svn checkout \ svn://localhost Альтернатива: svn co \ svn://localhost
|
- создание рабочей копии (выполнима при условии, что сервер "svnserve" запущен); - в случае успеха, получим сообщение вида "Checked out revision..." (номер версии рабочей копии); |
7 |
svn co file:/// \ \path\to\repository |
- аналогична предыдущей команде, однако применяется для создания рабочей копии локального хранилища; |
8 |
svn status |
- получение статуса рабочей копии файла (директории); - для индикации статуса предназначен следующий набор флагов (меток): - 'A' (added) – файл (дир.) добавлен; - 'D' (deleted) - // - удален; - 'M' (modified) - // - изменен; - 'R' (replaced) -// - замещен; … |
9 |
svn add \ <<filename (dirname)>> |
- добавление нового файла (папки) в рабочую копию; |
10 |
svn commit –m "mark" |
- внесение изменений из рабочей копии в репозитарий; - "mark" – метка (метаданные). |
Для всех команд символ \ в конце строки служит для экранирования переноса продолжения команды на следующую строку и является стандартным средством создания команд в несколько строк в ОС Windows. При написании команд в одну строку, символ экранирования использовать не надо.