- •Система контроля версий
- •Системы контроля версий (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
- •Цикл работы с ветвями
Конфликт
•А что будет, если изменения Салли перекрывают
изменения Гарри?
•Эта ситуация называется конфликтом и, как правило, это не является большой проблемой.
•Когда Гарри просит свой клиент слить последние изменения из хранилища в рабочую копию, его копия файла А помечается некоторым образом как находящаяся в состоянии конфликта:
- у Гарри будет возможность видеть оба набора конфликтующих изменений и вручную сделать между ними выбор.
•Помните, что ПО не может автоматически разрешать конфликты; только человек способен к пониманию и выполнению осмысленного выбора. Разрешив вручную перекрывающиеся изменения - возможно, после обсуждения с Салли - он может безопасно сохранить объединенный файл обратно в хранилище.
Вывод
•Модель копирование-изменение-слияние может выглядеть немного хаотично, однако, на практике она отлично работает.
•Пользователи могут работать параллельно, не тратя время на ожидание друг друга.
•При работе над одними и теми же файлами оказывается, что большинство параллельно вносимых изменений совсем не перекрывают- ся; конфликты бывают редко.
•И время, которое было потрачено на разреше- ние конфликтов, как правило, значительно меньше времени, отнимаемого блокирующей системой.
Витоге
•Все сходится к такому критическому фактору как взаимодействие пользователей.
•При плохом взаимопонимании увеличивается количество как синтаксических, так и семантических конфликтов.
•Нет системы, которая может повысить уровень взаимопонимания, и нет системы, которая может определять семантические конфликты.
•Не стоит возлагать большие надежды на то, что блокирующая система лучше защищена от конфликтов;
•На практике блокирование снижает продуктив- ность как ничто другое.
Список основных терминов
•Репозиторий (repository) — централизованное хранилище исходных кодов, рабочих материалов и документации. Любое количество клиентов подключается к хранилищу и читает или записывает эти файлы
•Рабочая копия/working copy (WC) — обычное дерево каталогов на компьютере, содержащие набор файлов для работы над проектом. Изменения в рабочей копии не доступны для других пользователей репозитория, до тех пор пока они не будут зафиксированы.
•Trunk — основное направление разработки
•Branch (''Ветка'') - направление разработки, которое существует независимо от другого направления, но имеет с ним общую историю. Ветка всегда берет начало как копия чего-либо и движется от этой точки, создавая свою собственную историю
•Tag (''Метка'') — выделенная явно, через создание отдельной папки версия файлов проекта в определенный момент времени.
•Revision — номер ревизии репозитория, в пределах репозитория номер ревизии уникальная величина
•Checkout – команда, которая выполняет начальное получение проекта из репозитория в WC.
•Commit – команда, которая выполняет фиксацию изменений файлов проекта в WC в Репозиторий.
Список основных терминов (продолжение)
•Update – команда, которая выполняет обновление файлов проекта в WC из репозитория
•Revert – команда, которая выполняет отмену любых изменений в файлах проекта в WC на основе номера ревизии репозитория.
•Merge – команда, которая выполняет слияние файлов из разных веток проекта и помещает результат слияния в WC.
•Conflict – ситуация, возникающая при фиксации изменений, когда одни и те же файлы изменяли несколько разработчиков.
•Resolve – набор правил по разрешению возникающих конфликтов.
•Import – команда, для быстрого копирования дерева файлов в Репозиторий.
•Export – команда, для экспорта проекта, отличается от checkout тем, что не создает в папках проекта служебную информацию.
•Switch – команда, которая выполняет переключение WC на другую ветку разработки.
•Create, Add, Delete, Copy, Move, Rename – команды для управления файлами и папками в репозитории или WC.
Структура хранилища (репозитория)
Три основных понятия:
•Trunk — основное направление разработки.
•Branch («Ветка») — направление разработки, которое существует независимо от другого направления, но имеет с ним общую историю.
•Tag («Метка») — выделенная явно через создание отдельной папки версия файлов проекта в определенный момент времени.
Основные концепции
Файловая система
•С точки зрения пользователя хранилище Subversion представляет собой «двумерную» файловую систему.
•Объекты в хранилище (файлы и директории) идентифицируются двумя «координатами»:
-именем ревизии,
-номером ревизии.
•Хранилище представляет собой массив мгновенных снимков (ревизий) дерева файлов и директорий, индексируемый номером ревизии. Каждый такой снимок - обычная (одномерная) файловая система.
•При необходимости указания на конкретную ревизию объекта используется запись вида:
-имя@ревизия,
-например, /main.c@29 - файл /main.c в ревизии 29.
•Такое указание ревизии, используемое для уточнения имени, называется стержневая ревизия ( peg revision).