10) Системы контроля версий
Primary tabs
Forums:
Лекция читалась преподавателем ПиИТ ФКН ВГУ Хлебостроевым Виктором Григорьевичем (ТП)
---------------------
в сети факультета лекция доступна в виде презентации, но по-моему удобнее учить , когда перед глазами что-то больше, чем один слайд)))
отформатирую позже. если у кого есть желание сделать раньше - скопируйте текст и отформатируйте к комментарии.
- Log in to post comments
- 7042 reads
vedro-compota
Tue, 12/06/2011 - 19:31
Permalink
Контроль версий
Контроль версий
Проблема контроля версий
Проблема контроля версий является одной из фундаментальных проблем программной инженерии в силу :=
Даже при индивидуальной работе над проектом разработчик вынужден хранить две и более версий системы, чтобы иметь возможность вернуться на предыдущие стадии разработки
«Ручная» работа с несколькими версиями весьма утомительна и непродуктивна
При коллективной разработке ситуация существенно усложняется, поскольку возникают проблемы:=
Актуальность проблемы
Особую актуальность проблема контроля версий приобрела с появлением инструментальных средств быстрой разработки проектов таких, как Delphi, С++ Builder и JBuilder, а затем Visual Studio.Net
Применение этих инструментальных средств привело к взрывообразному росту производительности труда разработчиков
Следствием этого стала перегрузка отдельных разработчиков и их групп проектами, исходным кодом и документацией
Стала очевидной необходимость пересмотра подходов к организации процесса создания ПС (программных средств)
---------------------------------
Средства управления версиями
Одним из аспектов нового подхода к организации разработки стало использование средств управления версиями проектов программного обеспечения – Project Version Control Systems (PVCS)
Системой контроля версий
Проект
Под проектом понимается совокупность файлов, включающая:=
Версия проекта
Основные процессы Систем контроля версий
Основными процессами в эксплуатации PVCS являются:=
Конфликтная ситуация
Коллективная работа над проектом требует наличия специальных средств поддержки и обеспечения безопасности данных
В частности, типичной в таких случаях является конфликтная ситуация, когда два или более разработчиков параллельно редактируют один и тот же файл, внося в него те или иные изменения
---------------
Системы резервного копирования
Прообразом систем контроля версий являлись системы резервного копирования файлов
Подобные системы существовали и как отдельные продукты и как компоненты, интегрированные в различные программные средства
Например, возможность резервного копирования имеется в Microsoft Word и с ее помощью можно вручную «зафиксировать» текущее состояние документа
MS Word можно настроить и на автоматическое сохранение версий при каждом закрытии документа после редактирования
-------------
Механизм контроля версий в Borland Delphi
Встроенный механизм контроля версий имеется в Borland Delphi
Впервые такая система, получившая название FreeVCS , была разработана в 1999 году Томасом Хенсле (Thomas Hensle) для Delphi 4
Для версии Delphi 5 компанией Borland была разработана система контроля версий TeamSource
TeamSource изначально является средством групповой разработки, однако может использоваться и в однопользовательском режиме, т.к. не имеет жесткой привязки к каким-либо сетевым средствам или протоколам
В 2005 году появился продукт Borland StarTeam – автоматизированная система управления конфигурацией и изменениями проекта
Кроме управления версиями, StarTeam предоставляет пользователям ряд других функций, связанных с управлением проектом
---------------------------
Механизм контроля версий в Visual Studio
В состав пакета Microsoft Visual Studio входит Visual SourceSafe (VSS) — файл-серверная система управления версиями, предназначенная для небольших команд разработчиков
VSS позволяет хранить в общем хранилище файлы, разделяемые несколькими пользователями, причем для каждого файла сохраняется история его версий
-----------------------------
Служба «теневого» копирования
В Windows Server 2003 реализована служба «теневого» копирования – Shadow Copies , одинаково подходящая и для целей автоматизации резервного копирования, и для организации контроля версий
Shadow Copies обладает способностью сохранять «снимки» состояния дисковых томов в момент своего запуска
Все изменения, вносимые в содержимое тома после старта и до завершения копирования, фиксируются в журнале транзакций файловой системы
Физическая запись внесенных изменений производится после окончания процедуры копирования
Однако, контроль версий не является главной задачей службы «теневого» копирования, из-за чего в данном вопросе ей недостает гибкости
В частности, =
----------------------
Системы документооборота
Механизмы контроля версий – это почти обязательный атрибут систем документооборота и современных groupware-пакетов, например Windows SharePoint Services
-----------------------------
Системы контроля версий с открытым кодом
Широкое распространение программных продуктов с открытым исходным кодом (Open source) не могло не затронуть и систем контроля версий
-------------
Система контроля изменений (RCS)
Система контроля изменений (Revision Control System, RCS ) была разработана в начале 1980-х годов Вальтером Тичи (Walter F. Tichy)
Система позволяет хранить версии только одного файла, поэтому управлять несколькими файлами приходится вручную
Для обеспечения возможности коллективной работы используется механизм блокировок
-------------------
Система конкурирующих версий (CVS) - продолжение проекта RCS
Продолжением проекта RCS стала система конкурирующих версий (Concurrent Versions System, CVS), разработанная Диком Груном (Dick Grune) в середине 1980-х годов
CVS использует архитектуру клиент-сервер, в которой вся информация о версиях хранится на сервере
Помимо обработки индивидуальных файлов CVS позволяет управлять группами файлов расположенных в директориях
ВАЖНО = CVS также позволяет вести несколько линий разработки проекта с помощью ветвей (branches) разработки
Таким образом, можно исправлять ошибки в очередной версии проекта и параллельно разрабатывать новую функциональность
В чистом виде CVS и ее клоны являются системами командной строки, поэтому для их комфортного использования необходима графическая оболочка
Для Windows в качестве такой оболочки может использоваться продукт WinCVS, распространяемый с открытым исходным кодом
Основные преимущества CVS и ее клонов состоят в =
Основными недостатками системы являются:=
=======================================
Система Subversion
Subversion (SVN) был разработан в 2000 году по инициативе фирмы CollabNet и по сравнению с СVS:=
Хранилище версий
Subversion — централизованная система (в отличие от распределённых систем, таких, как Git или Mercurial), то есть данные хранятся в едином хранилище.
Хранилище может располагаться на локальном диске или на сетевом сервере
Архитектура системы представлена на следующей схеме =
Модель работы
Модель работы Subversion:
==============================================
Модели версионирования (создания очередной версии)
Основной задачей системы управления версиями является обеспечение совместного редактирования и использования информации с возможностью разрешения конфликтных ситуаций - то есть противоречия изменений ,внесённых в один и тот же файл разными разработчиками
Для этого могут использоваться те или иные модели версионирования
-----------------
Модель Блокирование-Изменение-Разблокирование
Свойства=
Схема работы модели Блокирование-Изменение-Разблокирование (пример)=
Действия на схеме =
Недостатки модели =
---------------------------------
Модель Копирование-Изменение-Слияние
Принцип действия=
Пример работы модели Копирование-Изменение-Слияние
=
Изображено следующее:
Объединение изменений
При создании обновленного файла могут возникнуть две ситуации:
Рабочие копии Рабочая Копия Subversion
Рабочая копия представляет собой обычное дерево каталогов, содержащее набор различных файлов
Файлы рабочей копии могут произвольным образом редактироваться разработчиком, оставаясь недоступными другим участникам группы
После внесения изменений в файлы рабочей копии и проверки их корректности разработчик может записать свою версию в хранилище, т.е. опубликовать
Если другие участники проекта производили редактирование тех же файлов и уже опубликовали свои изменения, Subversion предоставляет возможность для объединения этих изменений с рабочей копией данного разработчика
Служебный каталог
Файлы в служебном каталоге помогают определить какие файлы рабочей копии содержат неопубликованные изменения, и какие файлы устарели по отношению к файлам других участников
-----------------
Хранилище (репозиторий)
Представляет собой последовательность фиксированных состояний размещенной в ней файловой системы
Хранилище создается с помощью входящей в состав поставки Subversion утилиты SvnAdmin путем выполнения команды:
-----------------------
Импорт в хранилище
В качестве первого аргумента этой команды задается путь к поддереву, которое будет загружено в репозиторий
В частности, это может быть папка, содержащая некоторый проект
Вторым аргументом команды импорта является URL-адрес, который используется для доступа к хранилищу
Доступ к хранилищу
Получить доступ к хранилищу Subversion можно различными способами – на локальном диске или через ряд сетевых протоколов
----------------------------------
URL для доступа к хранилищу
-----------
Файловая система хранилища
Как правило, хранилище Subversion содержит файлы нескольких проектов
Каждый проект представляется в виде подкаталога файловой системы хранилища
При таком подходе, пользовательская рабочая копия обычно соответствует отдельному подкаталогу хранилища
Правки (в смысле версии)
=
Каждое новое состояние файловой системы хранилища называется правкой
Каждая правка получает уникальный номер, на единицу больший номера предыдущей правки
Начальная правка вновь созданного хранилища получает номер 0 и не содержит ничего, кроме пустого корневого каталога
понятие правки связано с сотоянием хранилища, а состоянию проекта соотвествует новая версия.
изменение отдельной ветки разработки - означает появление новой версии проекта, в то время как факт правки хранилища в целом не означает этого.
--------------------
Глобальность правок
Номера правок в Subversion являются глобальными, т.е. относятся ко всем, а не только к отдельно взятым файлам
Каждый номер правки соответствует целому дереву, отдельному состоянию хранилища после зафиксированного изменения
-----------------------
Просмотр списка файлов
Список файлов того или иного проекта из репозитория можно просмотреть с помощью команды
Флаг –v указывает на необходимость вывода полной информации о правке, включая ее номер, дату создания и т.д.
-------------------
Смешивание правок
Следует иметь в виду, что рабочие копии не всегда соответствуют какой-то одной правке в хранилище; они могут содержать файлы из разных правок
Пусть, например, первый разработчик получил рабочую копию из хранилища, у которого самая последняя правка имеет номер 4
На данный момент рабочий каталог полностью соответствует правке 4 в хранилище
Допустим, что разработчик внес изменения в файл button.c и зафиксировал эти изменения
При отсутствии других фиксаций будет создана правка под номером 5, и теперь его рабочая копия выглядит следующим образом
Предположим, что после этого второй разработчик фиксирует изменения integer.c, создавая правку 6
Если первый разработчик актуализирует свою рабочую копию, то она станет выглядеть так
Изменения, внесенные в integer.c вторым разработчиком будут отражены в рабочей копии первого разработчика, как и его собственные, сделанные в файле button.c
Текст Makefile в правках 4, 5 и 6 идентичен, однако Subversion проставляет номер правки 6 для рабочей копии Makefile, чтобы показать что файл не устарел
Таким образом, после выполнения обновления первым разработчиком его рабочей копии, она будет полностью соответствовать текущему состоянию хранилища
----------------
Фиксация локальных изменений
После внесения изменений в файл рабочей копии разработчик может зафиксировать внесенные изменения, выполнив команду
Например
В результате в хранилище создается новая правка
----------------------------
Обновление рабочей копии
Для актуализации рабочей копии используется команда
При этом обновляются только те файлы, в которые вносились изменения между обновлениями
-----------------------------
Служебный каталог
В служебном каталоге .svn для каждого файла рабочего каталога записывается следующая информация:
Состояния файла
Используя эту информацию при соединении с хранилищем, Subversion определяет, в каком из четырех возможных состояний находится рабочий файл:=
теперь подробнее =
-------------
1) Не изменялся и не устарел -
то есть никто этот файл не трогал
2) Изменялся локально и не устарел =
то есть мы изменили файл - при этом никто не успел до нашей публикации опубликовать какие-то собственные изменения.
Файл был изменен в рабочей копии, но в хранилище не фиксировались изменения этого файла последнего обновления рабочей копии
Есть локальные изменения, которые не были зафиксированы в хранилище, поэтому svn commit выполнит фиксацию этих изменений, а svn update не сделает ничего - специально чтобы не испортить ваши данные .
3) Не изменялся и устарел =
то есть кто-то другой из вашей комынды провёл изменения и опубликовал их
4) Изменялся и устарел
то есть вы параллельно с кем-то правили файл, но этот кто-то опубликовал изменения раньше
=
_____________
матфак вгу и остальная классика =)