- •Subversion — Википедия
- •[Править] Общие сведения [править] Возможности
- •[Править] Модель работы
- •[Править] Типы репозиториев
- •[Править] Доступ к репозиторию
- •[Править] Основные концепции [править] Файловая система
- •[Править] Имена файлов
- •[Править] Номера ревизий
- •[Править] Оперативная и стержневая ревизии
- •[Править] Операции над файловой системой
- •[Править] Фиксация изменений [править] Рабочая копия
- •[Править] Транзакции
- •[Править] Локальные и удалённые формы команд
- •[Править] Структура хранилища [править] Структура проекта в хранилище
- •[Править] Ветви
- •[Править] Метки
- •[Править] Свойства (properties)
- •[Править] Свойства объектов файловой системы
- •[Править] Свойства файлов
- •[Править] Свойства директорий
- •[Править] Свойства ревизий
- •[Править] Использование Subversion [править] Рабочий цикл
- •[Править] Ветвление
- •[Править] Создание ветвей
- •[Править] Работа с ветвями
- •[Править] Слияние [править] Копирование изменений между ветвями
- •[Править] Другие применения команды svn merge
- •[Править] Создание хранилища
- •[Править] Subversion и cvs [править] Сравнение
- •[Править] Миграция с cvs на Subversion [править] Преобразование репозитория
- •[Править] Отличия в использовании [править] Различия в работе с файлами
- •[Править] Адресация состояния хранилища
- •[Править] Внутренняя структура [править] Уровни
- •[Править] Конфигурация клиента
- •[Править] Проблемы при переименовании файлов
- •[Править] Слабая поддержка слияния ветвей
- •[Править] Невозможность удаления данных из хранилища
- •[Править] Дополнительное программное обеспечение
- •[Править] Краткое описание
- •[Править] Лицензирование:
- •История файла
- •Использование файла
[Править] Ветвление
Ветвлениеявляется важным аспектом работы систем управления версиями, поскольку типичные приёмы[32]управления версиями (по крайней мере, при разработкепрограммного обеспечения) подразумевают использование ветвей. Subversion обладает достаточно развитыми возможностями для ветвления и слияния (однаконе поддерживает слияниепереименованных файлов и директорий).
Рис. 3
. Пример эволюции ветвей в Subversion
На рис. 3 условно показан пример эволюции ветвей в хранилище. Зелёным цветом показана основная линия разработки проекта (англ.mainline, trunk), жёлтым — ветви, синим — метки, пурпурным — ветвь, разработка которой прекращена. Красными стрелками показаны слияния изменений.
[Править] Создание ветвей
Новая ветвь(а такжеметка) создаётся командойsvn copy, которая создаёт в хранилище копию с наследованием истории ревизий источника (операцияA+). Для создания ветвей всегда следует использовать «удалённую» форму командыsvn copy, например:
svn copy http://.../trunk/dir http://.../branches/branch_name -m "Creating a branch of dir"
Полученная копия будет ветвью (или меткой, в зависимости от способа работы с ней). В дальнейшем изменения, сделанные на ветви, могут быть внесены в источник, из которого была создана эта ветвь, такое распространение изменений называется слияние(англ.merge).
Операции копирования в Subversion дешёвые(англ.cheap copy), то есть требуют небольшого фиксированного количества времени и дискового пространства. Хранилище спроектировано таким образом[33], что при любом копировании происходит не дублирование данных, а создание ссылки на источник (аналогичножёсткой ссылке), однако этот механизм чисто внутренний — с точки зрения пользователя происходит именно создание копии. Благодаря высокой эффективности создания ветвей их можно создавать настолько часто, насколько это необходимо (однакослияние— необходимое дополнение к ветвлению — выполняется в Subversion медленнее, чем в других современных системах управления версиями).
[Править] Работа с ветвями
В целом работа на ветви не отличается от работы на основной линии разработки (trunk). Специфичные команды требуются только для действий, в которых задействовано более одной ветви. К таким командам относятся (помимо команды создания ветвиsvn copy):
svn switch— переключение рабочей копии на другую ветвь — используется для того, чтобы переключить имеющуюся рабочую копию на другую ветвь. В результате переключения служебные данные рабочей копии изменяются так, как будто эта рабочая копия получена операциейsvn checkoutиз той ветви, на которую она переключена. При этом объём сетевого трафика меньше, чем приsvn checkout, так как передается только разница между данными в рабочей копии и целевой ветвью;
svn merge— копирование набора изменений между ветвями — используется для слияния.
Как правило, полный цикл работы с ветвями включает следующие этапы:
создание ветви (svn copy);
переключение имеющейся рабочей копии на ветвь (svn switch) или создание новой рабочей копии путём закачки (svn checkout);
изменение файлов и директорий в рабочей копии, фиксация этих изменений (svn commit);
копирование в ветвь свежих изменений из родительской ветви, сделанных после ветвления (svn merge,svn commit);
копирование изменений из ветви в родительскую ветвь (svn merge,svn commit);
удаление ветви (svn delete), если её жизненный цикл закончен.