7.3. Система управления версиями
7.3.1. Описание системы Subversion
Система управления версиями используется в процессе разработки и обслуживания web-приложений. Основной задачей системы управления версиями является обеспечение совместного редактирования и использования информации. Использование данной системы обеспечивает возможность командной разработки web-приложения и централизованного хранения данных в едином хранилище. Хранилище может быть расположено на удаленном сервере и к нему должна быть обеспечена возможность удаленного доступа нескольких клиентов. Система управления версиями решает одну из важнейших проблем совместной разработки и изменения информации – проблему разделения файлов.
Для обеспечения возможности командной разработки мной была использована централизованная система управления версиями Subversion. На данный момент Subversion, которую еще называют SVN по имени входящей в дистрибутив системы клиентской программы, является ведущей системой управления версиями, данную систему используют ведущие компании по разработке web-приложений. В системе Subversion реализована модель «Копирование – Изменение – Слияние» [4], позволяющая разработчикам независимо друг от друга разрабатывать сценарии web-приложения, объединяя результаты своих трудов в едином централизованном хранилище, чаще всего расположенном на компьютере, на котором находится web-приложение.
Хранилище содержит информацию в форме дерева файлов — типичном представлении файлов и каталогов. Любое количество клиентов подключается к хранилищу и читает или записывает эти файлы. Записывая данные, клиент делает информацию доступной для остальных. Читая данные, клиент получает информацию от других. Хранилище в системе Subversion принято называть репозиторием. Данные действия отражены на рисунке 8.
Рисунок 8 – схема работы системы управления версиями
С точки зрения пользователя хранилище Subversion представляет собой «двумерную» файловую систему. Объекты в хранилище (файлы и директории) идентифицируются двумя «координатами»: именем и номером ревизии. Другими словами, хранилище представляет собой массив мгновенных снимков (ревизий) дерева файлов и директорий, индексируемый номером ревизии. Каждый такой снимок - обычная (одномерная) файловая система. Каждый клиент (в нашем случае – разработчик web-приложения) может сделать такой снимок (checkout) и записать его на диск своего локального компьютера. Такой снимок называется рабочей копией. Рабочая копия — это созданная клиентской программой Subversion локальная копия части данных из хранилища, содержащая помимо собственно данных некоторую служебную информацию (скрытые директории с именем .svn). Далее клиент может осуществлять изменения файлов рабочей копии на своем локальном компьютере. После изменения файлов клиентом он может зафиксировать (commit) данные изменения в самом репозитории. Еще одним важным действием, которое может выполнить клиент, является слияние (update) последних изменений файлов репозитория с рабочей копией. Данное действие позволяет обеспечить наличие у клиента самой последней версии файлов репозитория. Можно также обновить рабочую копию до определенной версии, указав её номер. Перед непосредственным использованием системы управления версий в web-приложении следует упомянуть еще одно действие – откат (revert) изменений. Данное действие позволяет отменить изменения, сделанные в рабочей копии клиента и вернуть файл в состояние, которым он обладает в репозитории.
7.3.2. Настройка Subversion для работы с web-приложением
В состав дистрибутива GNU/Linux, установленного на компьютере web-приложения, Subversion входит и установлен. Для настройки системы Subversion, таким образом, необходимо выполнить следующую последовательность действий:
Создание и настройка репозитория;
Версионирование файлов и папок web-приложения;
Создание рабочей копии на локальном компьютере;
Создание и настройка репозитория.
Для того чтобы создать и настроить репозиторий, необходимо в командной строке операционной системы выполнить команду svnadmin create <�имя_репозитория>. В нашем случае репозиторий будет носить имя metagames. Соответственно, команда будет иметь вид:
[root@v8733 ~]# svnadmin create /home/svn/metagames
Все хранилища расположены в директории /home/svn.
Далее следует настроить доступ к репозиторию, указав логин и пароль доступа к репозиторию, название репозитория и права доступа разных групп пользователей к репозиторию. Для этого нужно править файл svnserve.conf, находящийся в файле /home/svn/metagames:
anon-access=none
auth-access=write
password-db=passwd
realm=metagames
В данном файле мы запретили доступ к репозиторию всем пользователям, кроме авторизованных, указали имя репозитория (metagames) и указали имя файла, содержащего логин и пароль доступа к репозиторию (passwd).
После внесения изменений необходимо перезапустить процесс системы Subversion, выполнив последовательно команды killall и svnserve.
[bitrix@v8733 ~]# killall svnserve;
[bitrix@v8733 ~]# svnserve –d –r /home/svn
Важно отметить, что процесс web-сервера Apache (httpd) на компьютере web-приложения запущен от имени пользователя с именем bitrix. Соответственно, владельцем файлов web-приложения является указанный выше пользователь. Поэтому запуск процесса системы Subversion svnserve следует выполнить от имени пользователя с именем bitrix, чтобы обеспечить сохранность настроек доступа и владельца изменяемых файлов.
Стандартная структура файлов верхнего уровня репозитория содержит следующую структуру:
branches
trunk
tags
Для того чтобы зафиксировать такую файловую структуру в репозитории, необходимо создать какую – нибудь папку в файловой структуре компьютера (например, init) web-приложения, выполнить команду checkout
svn checkout svn://metagames.ru/metagames/ init
, создать в данной папке указанные выше подпапки, выполнить для каждой из созданных подпапок команду add
svn add init/branches
….
и выполнить команду commit
svn commit init –m “Start doings”.
После этого в репозитории будет создана и версионирована требуемая структура.
Версионирование файлов и папок web-приложения.
Для того, чтобы версионировать файлы и папки web-приложения, нужно заранее определиться, какие именно файлы и папки стоит заносить в репозиторий, какие нет. После этого для выбранных папок следует выполнить команду checkout, например:
svn checkout svn://metagames.ru/metagames/trunk /home/bitrix/www/index/
Далее следует выполнить команду добавления требуемых файлов и подпапок выбранной папки и выполнить команду add.
svn add home/bitrix/www/index/all/
svn add home/bitrix/www/index/index.php
В конце следует зафиксировать изменения в репозитории, выполнив команду commit
svn commit home/bitrix/www/index –m “Сценарии всех платформ“.
Таким образом, выполнив данные процедуры для всех папок и файлов web-приложения, можно сформировать структуру репозитория.
Создание рабочей копии на локальном компьютере.
Теперь, когда репозиторий на компьютере web-приложения создан, можно выполнить снимок репозитория и создать рабочую копию репозитория на удаленном компьютере. Для этого можно воспользоваться программой – клиентом системы Subversion Tortoise SVN. Данная программа позволяет работать с репозиторием, вносить изменения в файлы и фиксировать их. В данной программе в графическом режиме доступны команды update, add, commit и т.д. В процессе разработки web-приложения на локальном копьютере была развернута копия web-приложения, затем для корневой папки с помощью команды Tortoise SVN checkout было выполнено версионирование файлов локального компьютера. Дальнейшие изменения файлов web-приложения проходили и проходят по следующему сценарию:
Изменение файла, например, /home/bitrix/index.php на локальном компьютере;
Выполнение фиксации изменений данного файла в репозитории с помощью команды Tortoise SVN commit;
Выполнение команды svn update для файла самого web-приложения в командной строке операционной системы, управляющей web-приложением на удаленном компьютере;
Данная технология управления версиями была использована при разработке web-приложения и используется в данный момент для поддержания работы web-приложения и обеспечения возможности работы над web-приложением нескольких разработчиков. Также стоит отметить важное для разработки свойство сохранения истории разработки в виде версий, которое позволяет следить за процессом разработки и делать откаты изменений в сценариях web-приложения, если разработчиками допущены какие – либо ошибки. Плюсом является то, что для доступа к файловой структуре web-приложения более не требуется доступов по протоколам FTP и HTTP, весь процесс разработки проходит на локальном компьютере, что позволяет максимально отладить сценарии перед обновлением репозитория и файлов web-приложения. Минусами использования системы управления версиями при разработке web-приложения является то, что от разработчиков в данном случае требуется наличие знаний по работе с данной системой. Также следует отметить то, что приходится разворачивать локальную копию web-приложения на компьютере разработчика, но наличие таких пакетов разработки, как «Джентльменский набор Web-разработчика», заметно упрощает данный процесс.
|