Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Версионный контроль / Реферат_Версиоонный_контроль.doc
Скачиваний:
17
Добавлен:
01.05.2014
Размер:
110.59 Кб
Скачать

Централизованные системы

Классический пример системы, который наверняка вспомнят, если речь идёт об управлении версиями - CVS (Concurrent Versioning System). Эта система издавна пользуется популярностью, ввиду своей открытости (свободная лицензия GPL, хотя и не с начала разработки, но по сию пору), стабильности и многоплатформенности. Под неё написано огромное количество сервисных программ, графических клиентов и т.п. Это также классический пример централизованной модели - CVS предоставляет сервер с репозиториями файлов, с помощью клиентских программ можно обращаться к этим хранилищам и получать к себе рабочие копии файлов, изменять их и отправлять обратно на сервер, где они получат новые номера версий. С помощью клиентского п/о можно отслеживать всю историю изменений каждого файла в репозитории. В общем, клиент-сервер в чистом виде. CVS можно рассматривать как дальнейшее развитие RCS - если в RCS история изменений велась для одного файла, то CVS позволяет удобней работать со множеством файлов, при этом в расчёт принята коллективная работа - сервер CVS обеспечивает авторизацию для работы многих пользователей с репозиторием. Тем не менее, CVS обладает рядом неприятных недостатков, которые есть вероятно следствие древности разработки этой системы. В CVS нет возможности переименовать файл (можно только удалить и добавить его вновь), то же относится к директориям. Для разработок программного кода неудобством является сложность разделения кода на ветви разработки. В CVS есть возможность организации веток, но если её пользовательский интерфейс сравнить с реализациями в более поздних системах, то работать с CVS больше не захочется.

CVS (Concurrent Versions System) — программный продукт, относящийся к разряду систем управления версиями (англ. version control system). Хранит историю изменений определённого набора файлов, как правило исходного кода программного обеспечения, и облегчает совместную работу группы людей (часто — программистов) над одним проектом. CVS популярна в мире открытого ПО. Система распространяется на условиях лицензии GNU GPL.

CVS использует архитектуру клиент-сервер. Обычно клиент и сервер соединяются через локальную сеть или через Интернет, но могут работать и на одной машине, если необходимо вести историю версий локального проекта. Серверное ПО обычно работает под управлением Unix (хотя существует CVS сервер и для Windows NT), тогда как CVS клиенты доступны во всех популярных операционных системах.

Сервер хранит в специальном хранилище (репозитории) текущую версию (версии) проекта и историю изменений, а клиент соединяется с ним, чтобы получить нужную ему версию или записать новую. Получив с сервера нужную версию (данная процедура называется check-out), клиент создаёт локальную копию проекта (или его части) — так называемую рабочую копию. После того как в файлы, находящиеся в рабочей копии, внесены необходимые изменения, они пересылаются на сервер (check-in).

Несколько клиентов могут работать над копиями проекта одновременно. Когда они отправляют результаты, сервер пытается слить их изменения в репозитории вместе. Если это не удаётся, например, в случае, когда два клиента изменили одни и те же строки в определённом файле, сервер не примет изменения от последней check-in операции и сообщит клиенту о конфликте, который должен быть исправлен вручную. Если check-in операция завершилась успешно, то номера версий всех затронутых файлов автоматически увеличиваются, и сервер записывает комментарий, дату и имя пользователя в свой журнал (data logging).

Клиенты также могут сравнить различные версии файлов, запросить полную историю изменений или получить исторический образ проекта на определённое число или по номеру ревизии. Многие Open Source проекты разрешают анонимный доступ на чтение, который впервые был применён OpenBSD. Это означает, что клиенты могут запрашивать и сравнивать версии файлов без пароля; только check-in операции ведущие к изменению данных в репозитории требуют пароль.

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

CVS также может содержать различные ветки проекта. Например, стабильная версия проекта может составлять одну ветвь (branch), в которую вносятся только исправления ошибок, тогда как активная разработка может вестись в параллельной ветке, которая включает значительные улучшения или изменения с момента выхода стабильной версии.

CVS использует механизм дельта-компрессии для эффективного хранения различных версий одного и того же файла.

Весьма большую популярность приобрела система Subversion, в которой устранены недостатки CVS. Собственно, как замена CVS эта система и декларируется. Это также продукт под свободной лицензией, что сделало Subversion широко применимой как в коммерческих так и в некоммерческих проектах. Нет проблем с переименованием файлов, легко создаются новые ветки кода и пометки (tags) к файлам, много дополнительных программ и GUI для разных платформ. Другим важным отличием Subversion (как и других поздних VCS) является возможность работы с наборами изменений (changesets или atomic commits), суть которых в занесении или отмене изменений сразу для многих файлов. Это подразумевает идею, что более важно знать что изменено, чем помнить где именно (в каких файлах) эти изменения произошли. Например сменив имя переменной во всех файлах проекта мы можем внести это изменение кода одной транзакцией и позже в истории логично видеть это как одно целостное изменение, а имена файлов являются уже второстепенным вопросом.

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

Subversion часто называют «svn», по названию клиентской программы, входящей в её дистрибутив.

Subversion — централизованная система. Данные хранятся в едином хранилище. При сохранении новых версий используется дельта-компрессия, т. е. система находит отличия новой версии от предыдущей и записывает только их, избегая ненужного дублирования данных. Хранилище может располагаться на локальном диске или на сетевом сервере. К локальному хранилищу клиент Subversion обращается непосредственно. Для доступа к удалённому серверу может использоваться собственный сетевой протокол или стандартный протокол WebDAV, поддерживаемый с помощью специального модуля для веб-сервера Apache.

Клиенты копируют файлы из хранилища, создавая локальные рабочие копии, затем модифицируют их и публикуют изменения в хранилище. Несколько клиентов могут одновременно обращаться к хранилищу. При использовании доступа с помощью WebDAV также поддерживается прозрачное управление версиями — если любой клиент WebDAV открывает для записи и затем сохраняет файл, хранящийся на сетевом ресурсе, то автоматически создаётся новая версия.

Отличия от CVS

Subversion отслеживает версии не только файлов, но и каталогов.

Если изменения сделаны в нескольких файлах и каталогах, они публикуются как одна транзакция. Это значит, что либо в хранилище попадают все изменения, либо состояние хранилища не изменяется.

При любых обновлениях версий между клиентом и сервером передаются только различия между файлами.

Subversion поддерживает копирование, перемещение и переименование файлов с сохранением истории изменений.

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

Subversion одинаково эффективно работает как с текстовыми, так и с двоичными файлами.

Начиная с версии 1.2, поддерживается необязательная блокировка файлов.

В Subversion нет меток (tag) и веток (branch), как таковых (см. Словарь). Вместо них используется иерархия каталогов — для каждой ветки или метки создаётся отдельный каталог. Создание таких каталогов — быстрая и дешёвая операция, потому что данные не дублируются, вместо этого публикуется новая версия, отличающаяся от предыдущей лишь расположением файлов.

По состоянию на 2006 год Subversion уступает по распространённости CVS, однако её можно назвать наиболее популярной альтернативой этой традиционной системе. Многие сообщества разработчиков открытого программного обеспечения перешли на использование Subversion. В их числе такие известные проекты как Apache Software Foundation, KDE, GNOME, GCC, MediaWiki, Python, Samba, Mono и многие другие.

CVS vs Subversion

Поскольку Subversion разрабатывалась как продвинутая замена CVS, изначально ставилась задача: сохранить всю привычную функциональность при добавлении новых возможностей. Поэтому большинство широкоиспользуемых команд Subversion имеют такой же синтаксис, как и CVS. Переход на Subversion несложен и не требует долгого привыкания.

n Атомарное принятие изменений. Поддержка атомарных коммитов позволяет либо принимать весь измененный код, либо не принимать изменения вовсе, если транзакция по каким-либо причинам (например, из-за падения канала) не была завершена. Subversion поддерживает такой режим работы и гарантирует, что репозиторий не будет содержать в себе несовместимых данных – либо репозиторий останется неизмененным, либо обновление будет полным.

n Переименование, перенос и копирование файлов и каталогов без потери версионирования и истории изменений. В отличие от CVS, которая требует вмешательства администратора сервера и ручного копирования файлов, Subversion изначально обладает такой возможностью, а при установке модуля SVN::Mirror, разработанного Chia-Ling Kao, Subversion также «обучается» клонировать данные из текущего в произвольный удаленный репозиторий.

n Права доступа к репозиторию. Вы можете назначать пользователям права доступа к различным частям репозитория, простым редактированием текстового конфигурационного файла.

n Комментарии к каждому измененному объекту. Теперь вы можете оставлять комментарий в журнале коммита к любому измененному вами файлу.

n Простота развертывания системы. Для построения полноценной работоспособной системы Subversion в большинстве случаев необходим только веб-сервер Apache2 и интерпретатор PHP, а минимальный набор утилит Subversion, позволяющий работать по протоколам SVN и SVN + SSH, вообще не требует установки стороннего ПО.

n Простота интеграции в существующую инфраструктуру сети. Доступ к репозиторию Subversion может осуществляться по протоколам HTTP, HTTPS, SVN, SVN+SSH, из набора которых вы сможете легко выбрать наиболее подходящий для заданной конфигурации сети.

n Разнообразные веб-интерфейсы для доступа к репозиторию. На текущий момент доступно около десятка программ для работы с репозиторием SVN: ViewCVS, SVN::Web, WebSVN, ViewSVN, mod_svn_view, Chora, Trac, SVN::RaWeb::Ligh, SVN Browser, Insurrection и т. д. В данной статье мы рассмотрим настройку WebSVN как наиболее простого и в то же время функционального инструмента.

n Кроме утилит командной строки, доступны также графические интерфейсы: кроссплатформенный RapidSVN, TortoiseSVN – плагин для MS Windows Explorer, а также – Jsvn, написанный на Java и доступный везде, где есть Java-машина.

n Ну и, наконец, лицензия. Subversion – программное обеспечение с открытым кодом и распространяется по лицензии Apache/BSD-style.

Что входит в состав пакета Subversion

n svn – клиент Subversion. Представляет собой утилиту командной строки, осуществляющую доступ к репозиторию Subversion.

n svnversion – программа, показывающая состояние компонент текущего репозитория.

n svnlook – утилита для контроля репозитария Subversion.

n svnadmin – утилита для создания, управления и восстановления репозитария Subversion.

n svndumpfilter – программа фильтрации дампов репозитория Subversion.

n mod_dav_svn – модуль для веб-сервера Apache2, предоставляющий доступ в репозиторий Subversion по протоколам HTTP и HTTPS.

n svnserve – программа-сервер, запускающаяся как одиночный демон или из inetd и предоставляющая доступ к репозиторию Subversion по протоколу SVN или SSH.