- •Система контроля версий
- •Системы контроля версий (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
- •Цикл работы с ветвями
Имена файлов
•Имя объекта файловой системы в Subversion образуется по тем же правилам, что и в UNIX-подобных операционных системах:
–существует только одна корневая директория,
–элементы пути разделяются косой чертой («/»).
•Объектами файловой системы являются файлы и директории (а также символические ссылки, которые эмулируются из обычных файлов путём установки атрибута svn:special).
Номера ревизий
•Номер ревизии в Subversion — это натуральное число (или 0 для самой первой ревизии), адресующее номер состояния хранилища в процессе изменения содержащихся в нём данных. Каждая успешная фиксация изменений порождает ровно одну новую ревизию в хранилище, то есть N-я ревизия — это состояние хранилища после N-й фиксации.
•В Subversion ревизия характеризует состояние не отдельного файла, а всего хранилища в целом. Например, ревизия 32 (обведено пунктиром на рисунке) — это состояние трёх файлов и двух директорий, существовавших в хранилище на тот момент.
•Номер ревизии является аналогом времени в том смысле, что меньшие номера ревизий соответствуют более ранним состояниям хранилища, а боольшие - поздним. В нулевой ревизии хранилище содержит только пустую корневую директорию.
Операции над файловой системой
Над объектами файловой системы в хранилище Subversion могут быть произведены следующие операции (в скобках указано краткое именование операции в обозначениях команды svn status):
•Добавление - add (A). Добавление объекта в файловую систему. Добавленный объект не имеет истории ревизий.
–файл /main.c был добавлен в ревизии 27.
•Модификация - modify (M). Модификация объекта, например, изменение содержимого файла или изменение свойств файла или директории.
–файл /main.c был модифицирован в ревизии 28.
•Удаление - delete (D). Удаление файла из головной и последующих ревизий. При этом файл остаётся в предыдущих ревизиях.
–файл /main.c был удалён в ревизии 30.
Операции над файловой системой
•Добавление с историей – added with history (A+). Представляет собой копирование объекта внутри файловой системы хранилища, то есть объект
имя_источника@ревизия_источника
копируется в
имя_копии@HEAD.
•Скопированный объект наследует от источника историю ревизий до момента копирования (наследование истории показано на рисунке пунктирными связями)
-в ревизии 29 директория /tags/R1 была скопирована с директории /trunk@27;
-в ревизии 31 файл /main.c был скопирован с /main.c@29, то есть с более ранней ревизии самого себя, таким образом, произведено восстановление ранее удалённого (в ревизии 30) файла с сохранением истории ревизий.
Операции над файловой системой
•Замена (R+). Имеет место в случае, когда в одной ревизии произведено и удаление объекта (D), и добавление с историей (A+) объекта с тем же самым
именем. Хотя имя при операции замены остаётся неизменным, Subversion рассматривает объект до и после замены как два различных объекта с различными историями ревизий (история старого заканчивается в точке замены, история нового наследуется от источника копирования и продолжается далее). Пример на рисунке:
•в ревизии 30 файл /file.txt был заменён: старый файл /file.txt удалён, а новый файл с тем же именем скопирован с файла /bar.txt@29
Операции над файловой системой
•Замена -replace (R+). Имеет место в случае, когда в одной ревизии произведено и удаление объекта (D), и добавление с историей (A+) объекта с тем же самым именем.
•Хотя имя при операции замены остаётся неизменным, Subversion рассматривает объект до и после замены как два различных объекта с различными историями ревизий (история старого заканчивается в точке замены, история нового наследуется от источника копирования и продолжается далее).
-в ревизии 30 файл /file.txt был заменён:
-старый файл /file.txt удалён,
-новый файл с тем же именем скопирован с
файла /bar.txt@29.
Фиксация
изменений
Рабочая копия
•Рабочая копия - это созданная клиентской программой Subversion локальная копия части данных из хранилища, содержащая также некоторую служебную информацию:
- скрытые директории с именем .svn
•Служебная информация необходима для правильного функционирования рабочей копии; что-либо менять в служебных данных нельзя.
•Минимальной единицей данных, которую можно получить из хранилища как рабочую копию, является директория.
•Можно также извлечь директорию без поддиректорий, а потом докачивать их по мере необходимости.
•Рабочая копия в Subversion всегда соответст- вует ровно одной директории хранилища.
•Извлечь из хранилища отдельный файл как рабочую копию невозможно.
•Рабочая копия является самодостаточной в том смысле, что Subversion не хранит каких-либо данных, относящихся к рабочей копии, вне её.
•Имея одну рабочую копию, можно сделать ещё несколько копий простым копированием без затрат сетевого трафика.
•Создание рабочей копии является первым и необходимым этапом для фиксации локальных изменений.
•Зафиксировать в хранилище можно только изменения, сделанные в рабочей копии.
•Ваша рабочая копия - это ваше личное рабочее пространство.
•Subversion как не смешивает с вашими изменения, вносимые другими, так и не делает доступными для других изменения, сделанные вами, пока вы сами не прикажете сделать это.
•После того, как вы внесли изменения в файлы вашей рабочей копии и убедились в том, что они корректно работают, Subversion предлагает вам команды «публикации» (записи в хранилище) ваших изменений, в результате чего они станут доступными для всех участников проекта.
•Если другие участники проекта опубликовали свои изменения, Subversion предлагает вам команды для объединения (путем чтения информации из хранилища) этих изменений с вашей рабочей копией.
Предположим, что есть хранилище,
содержащее два программных проекта: paint и calc.
Каждый проект располагается в своем собственном каталоге.