
- •Система контроля версий
- •Системы контроля версий (Version Control System, VCS)
- •Система контроля версий (VCS) умеет:
- •Хранилище (репозиторий)
- ••Хранилище является разновидностью файл-сервера, однако не совсем обычного.
- •Назначение
- •История
- •Основные события истории развития Subversion:
- ••В настоящее время Subversion используется многими сообществами разработчиков открытого программного обеспечения.
- •Возможности SVN
- •Возможности SVN (продолжение)
- •Атеперь для «чайников»
- •Архитектура SVN
- •Типы репозиториев
- •Модель работы
- •Всвязи с тем, что разработчики работают только с локальными копиями, могут возникать трудности,
- •Проблема разделения файлов
- •Проблема потери изменений (иллюстрация)
- •Модель Блокирование-Изменение-Разблокирование
- •Проблемой модели блокирование-изменение-разблокирование является то, что она немного ограниченная и часто доставляет неудобства
- •Модель Копирование-Изменение-Слияние
- •Модель копирование-изменение-слияние
- •Конфликт
- •Вывод
- •Витоге
- •Список основных терминов
- •Список основных терминов (продолжение)
- •Структура хранилища (репозитория)
- •Основные концепции
- •Файловая система
- ••С точки зрения пользователя хранилище Subversion представляет собой «двумерную» файловую систему.
- •Имена файлов
- •Операции над файловой системой
- •Операции над файловой системой
- •Операции над файловой системой
- •Операции над файловой системой
- •Фиксация
- •Рабочая копия
- ••Рабочая копия в Subversion всегда соответст- вует ровно одной директории хранилища.
- ••Ваша рабочая копия - это ваше личное рабочее пространство.
- •Предположим, что есть хранилище,
- •Для того, чтобы создать рабочую копию, нужно получить какой-либо из подкаталогов хранилища.
- •Транзакции
- ••Изоляция гарантирует, что промежуточные состояния хранилища внутри транзакции не видны другим транзакциям и
- •Клиент командной строки Subversion
- •Команды svn
- •Типичная итерация рабочего цикла с Subversion:
- •- если файл или директорию в рабочей копии нужно удалить, переименовать, переместить
- •Краткий справочник svn
- •Создание рабочей копии
- •Изменение файлов и директорий в рабочей копии
- •svn move
- •svn copy
- •svn update
- •svn commit
- •svn revert
- •svn add file_name
- •svn status
- •Цикл работы с ветвями
Система контроля версий (VCS) умеет:
-восстанавливать старые версии;
-синхронизировать между собой самые новые версии.
Есть много разных VCS:
-Perforce, Microsoft Visual Sourcesafe (платные),
-CVS, Subversion (бесплатные).
Мы будем говорить о Subversion (система управления версиями), известной также как svn (по названию программы-клиента для командной строки, входящей в состав программного пакета).
Это клиент-серверная система, состоящая из:
-сервера (к примеру, svnserve), на котором есть репозиторий (repository) - база данных,
-клиентских машин, на которых есть рабочие копии (working copies).

Хранилище (репозиторий)
•Subversion является централизованной системой для совместного использования информации.
•Хранилище –центр хранения данных содержит информацию в форме
дерева файлов.
•Любое количество клиентов подключается к хранилищу и читает или записывает эти файлы.
•Записывая данные, клиент делает информацию доступной для остальных; читая данные, клиент получает информацию от других.
Типичная клиент/серверная система
•Хранилище является разновидностью файл-сервера, однако не совсем обычного.
•Хранилище Subversion запоминает каждое внесенное изменение:
-любое изменение любого файла,
-изменения в самом дереве каталогов, такие как добавление, удаление и реорганизация файлов и каталогов.
•При чтении данных из хранилища клиент обычно видит только последнюю версию дерева файлов.
•Клиент также имеет возможность просмотреть предыдущие состояния файловой системы.
•Вопросы типа
«Что содержал этот каталог в прошлую среду?», «Кто был последним, изменявшим этот файл, и какие вносились изменения?»
являются основополагающими для любой системы управления версиями — системы, разработанной для записи и отслеживания изменений информации во времени.
Назначение
SVN – открытая система управлениями версиями файлов и каталогов проектов с центральным хранилищем (репозиторием) и сетевым доступом.
SVN предназначена для:
•хранения всех версий исходных файлов проекта;
•обеспечения возможности одновременной работы с одними и теми же файлами проекта для множества участников;
•сопровождения нескольких версий проекта одновременно (работа с ветвями) .
История
Разработка Subversion была начата в 2000 г. по инициативе и при финансовой поддержке CollabNet Inc.
Цель проекта - заменить собой распространенную на тот момент систему Concurrent Versions System (CVS), которая ныне считается устаревшей.
Subversion реализует все основные функции CVS и свободна от ряда недостатков последней.
Основные события истории развития Subversion:
•31 августа 2001 года команда разработчиков перешла с CVS на Subversion для управления собственным исходным кодом. Subversion стала «самодостаточной».
•23 февраля 2004 года вышел релиз 1.0.0. К этому времени Subversion уже использовалась примерно на 1400 серверах с открытым доступом.
•29 сентября 2004 года появился релиз 1.1.0. Среди основных нововведений - новый формат хранилища файлов.
•21 мая 2005 года вышел релиз 1.2.0, в котором добавлена возможность блокировки файлов.
•30 декабря 2005 года вышел релиз 1.3.0. Основными изменениями являются возможность устанавливать права доступа к директориям при использовании svnserve.
•10 сентября 2006 года вышел релиз 1.4.0. Включены функции самовосстановления.
•19 июня 2008 года вышел релиз 1.5.0. Введена базовая поддержка отслеживания слияний (merge tracking).
•20 марта 2009 года вышел релиз 1.6.0. Улучшения поддержки svn:externals, обнаружение «конфликтов деревьев» (tree conflict), улучшение эффективности хранения данных в репозитории.
•В феврале 2010 года проект Subversion был официально переведён под управление Apache Software Foundation (ASF).
•11 октября 2011 года состоялся релиз 1.7. Основные улучшения: теперь только одна папка .svn в корне рабочей копии; ускорена работа по HTTP; добавлена утилита svnrdump; новая команда svn patch.
•В настоящее время Subversion используется многими сообществами разработчиков открытого программного обеспечения.
•В их числе такие известные проекты, как Apache, GCC, Free Pascal, Python, Ruby, Mono, FreeBSD, Haiku, AROS, MediaWiki.
•Subversion также широко используется в закрытых проектах и корпоративной сфере.
•В 2007 году независимая компания Forrester Research, сравнивая преимущества и недостатки различных систем, оценила Subversion как «единоличного лидера в категории Standalone Software Configuration Management (SCM) и сильного участника в категории Software Configuration and Change Management (SCCM)».
•В качестве официальной документации позиционируется книга издательства O'Reilly Media, (http://svnbook.red- bean.com/) дописываемая авторами по мере выхода новых версий SVN.
•Англоязычные версии книги описывают сейчас версии 1.6 и 1.5,
•На русском языке имеются книги, описывающие версии до 1.4 включительно.
Возможности SVN
•Хранение полной истории изменений отслеживаемых объектов (файлов, каталогов, символьных ссылок) в централизованном хранилище (репозитории), в том числе при изменении атрибутов («метаданных»), перемещении, переименовании и удалении
•Копирование объектов с разветвлением истории - при копировании
вхранилище появляются два отдельных объекта с общей историей
•Поддержка переноса изменений между копиями объектов, в том числе полного слияния копий
•Поддержка ветвления:
–создание ветвей (копированием директорий) и работа с ними
–слияние ветвей (переносом изменений)
•Поддержка меток (копированием директорий)
•Поддержка конкурентной (в том числе одновременной, с изоляцией транзакций) многопользовательской работы с хранилищем и, в большинстве случаев, автоматическим слиянием изменений различных разработчиков (в рабочей копии)
Возможности SVN (продолжение)
•Фиксации изменений в хранилище (в том числе многообъектные) организуются в виде атомарных транзакций
•Сетевой обмен между сервером и клиентом предусматривает передачу только различий между рабочей копией и хранилищем
•Обеспечивается одинаково эффективная работа как с текстовыми, так и с двоичными файлами
•Различные варианты доступа к хранилищу, в том числе:
–непосредственный доступ на локальной файловой системе;
–по собственному сетевому протоколу;
–через веб-сервер по протоколу WebDAV/DeltaV.
•Вывод клиента командной строки одинаково удобен и для чтения, и для разбора программами
•Два возможных внутренних формата репозитория: база данных или набор обычных файлов
•Библиотеки для языков PHP, Python, Perl, Java позволяют встроить функциональность клиента Subversion в программы, написанные на этих языках
•Многоуровневая архитектура библиотек, изначально рассчитанная на клиент-серверную модель
Атеперь для «чайников»
•Контроль изменений каталогов. SVN использует «виртуальную» файловую систему с возможностями управления версиями, которая способна отслеживать изменения во времени целых структур каталогов
•Настоящая история версий. SVN делает возможным добавление, удаление, копирование и переименование как файлов, так и каталогов. При этом каждый вновь добавленный файл начинает жизнь с чистого листа, сохраняя собственную историю изменений
•Атомарная фиксация изменений. Каждый набор изменений либо попадает в хранилище целиком, либо не попадает туда вовсе. Т.е. если при фиксации изменений проекта произошла ошибка при обработке файла, то изменения всего проекта не будут зафиксированы
•Метаданные с версиями. Каждый файл и каталог имеет собственный набор свойств, представленных в виде названия и значения. Вы можете создавать и сохранять любые необходимые пары названий свойств и их значений. Свойства файлов точно так же находятся под управлением версиями, как их содержимое
•Единый способ работы с данными. SVN обнаруживает различия между файлами с помощью специального бинарного алгоритма, который одинаково работает как с текстовыми, так и с бинарными файлами. Файлы записываются в хранилище в сжатом виде независимо от их типа, а различия между отдельными версиями могут передаваться по сети в обоих направлениях
•Эффективные ветки и метки. SVN создаёт ветки и метки путём простого копирования проекта, используя механизм, похожий на жёсткие ссылки в файловых системах. Благодаря этому, операции по созданию веток и меток занимают немного времени