Содержание
Системы управления версиями:
- Позволяют создавать разные варианты одного документа, т.н. ветки, с общей историей изменений до точки ветвления и с разными — после нее.
- Дают возможность узнать, кто и когда добавил или изменил конкретный набор строк в файле.
- Ведут журнал изменений, в который пользователи могут записывать пояснения о том, что и почему они изменили в данной версии.
- Контролируют права доступа пользователей, разрешая или запрещая чтение или изменение данных, в зависимости от того, кто запрашивает это действие.
Виды систем управления версиями:
- CVS,
- Subversion,
- Microsoft Visual SourceSafe,
- Mercurial,
- Git.
Subversion (SVN)
- Официальный сайт — http://subversion.apache.org/.
- Модель работы:
- Централизованная система (в отличие от распределенных систем, таких как Git или Mercurial).
- Копирование — Изменение — Слияние, т.е. пользователь забирает файл себе, изменяет его и закачивает обратно.
- Блокирование — Изменение — Разблокирование. Когда пользователь выбирает из репозитария файл, он блокируется на запись для всех остальных.
- Используется дельта-компрессия.
- Репозиторий (repository).
- Рабочая копия/working copy (WC).
- Типы репозиториев:
- Базы данных на основе Berkeley DB.
- Обычные файлы специального формата.
- Доступ к репозиторию
- Локальная или сетевая файловая система.
- WebDAV/DeltaV (поверх http или https) с использованием модуля mod_dav_svn для Apache 2.
- Собственный протокол ‘svn’ (порт по умолчанию 3690).
Основные концепции
- Файловая система:
- Объектами файловой системы являются файлы и директории.
- ‘Двумерная’ файловая система.
- ‘Координаты’: имя и номер ревизии. /main.c@29.
- Имена файлов:
- Одна корневая директория.
- Элементы пути разделяются косой чертой ‘/’.
- Номера ревизий:
- Это натуральное число.
- Минимальный номер ревизии 0 содержит только пустую корневую директорию.
- Максимальный номер ревизии соответствует самому последнему состоянию хранилища.
- Транзакции:
- Атомарность,
- Изоляция.
Операции над файловой системой
Структура хранилища (репозитория)
Здесь есть три основных понятия: trunk, branch, tags.
- Trunk — основное направление разработки.
- Branch (‘Ветка’) — направление разработки, которое существует независимо от другого направления, но имеет с ним общую историю.
- Tag (‘Метка’) — выделенная явно, через создание отдельной папки версия файлов проекта в определенный момент времени.

Использование Subversion
Рассмотрим пошагово основные команды. В скобках указаны команды для командной строки.
- Создание хранилища (svnadmin create).
- Создание рабочей копии (svn checkout).
- Изменения файлов и директорий в рабочей копии.
- Для файловых операций (svn delete, svn move, svn copy).
- Просмотр локальных (еще не зафиксированных) изменений в рабочей копии (svn diff).
- Любые локальные изменения, если они признаны неудачными, можно откатить (svn revert).
- Получение в свою рабочую копию свежих изменений, зафиксированных в хранилище другими пользователями (svn update).
- Фиксация своих изменений в хранилище (svn commit).
- Регулярное обновление рабочей копии последними зафиксированными изменениями (svn update).
Работа с ветвями
- Cоздание ветви (svn copy).
- Переключение имеющейся рабочей копии на ветвь (svn switch) или создание новой рабочей копии путем закачки (svn checkout).
- Изменение файлов и директорий в рабочей копии, фиксация этих изменений (svn commit).
- Копирование в ветвь свежих изменений из родительской ветви, сделанных после ветвления (svn merge, svn commit).
- Копирование изменений с ветви в родительскую ветвь (svn merge, svn commit).
- Удаление ветви (svn delete), если ее жизненный цикл закончен.