Главная Форум Wiki Почта Jabber Devel NIX-FILES
Материал из AltLUG Wiki
Перейти к: навигация, поиск

Subversion

Subversion (также известная как «SVN») — свободная централизованная система управления версиями, официально выпущенная в 2004 году компанией CollabNet Inc.

Содержание

Структура проекта в хранилище

Subversion не накладывает каких-либо ограничений на структуру директорий в файловой системе хранилища, она может быть какой угодно в рамках правил именования объектов файловой системы. Тем не менее, существуют некоторые общепринятые «правила хорошего тона». В простейшем случае в корневой директории файловой системы имеются как минимум три директории:

/branches
/tags
/trunk

Директория /trunk содержит основную линию разработки проекта, /branches содержит все ветви, /tags содержит все метки.

Использование Subversion

Простейший рабочий цикл

Простейший цикл работы с Subversion включает нижеописанные этапы.

  • Создание рабочей копии (svn checkout).
  • Изменения файлов и директорий в рабочей копии. Изменения директорий и информации о файлах производится средствами Subversion, а в изменении (содержимого) файлов Subversion никак не задействован — изменения производятся программами, предназначенными для этого (текстовые редакторы, средства разработки и т.п.):
    • для файловых операций, если нужно удалить, переименовать, переместить или скопировать файл или директорию в рабочей копии, необходимо использовать средства Subversion (команды svn delete, svn move, svn copy);
    • просмотр локальных (ещё не зафиксированных) изменений в рабочей копии осуществляется командой (svn diff);
    • любые локальные изменения, если они признаны неудачными, можно откатить (svn revert).
  • Получение в свою рабочую копию свежих изменений, зафиксированных в хранилище другими пользователями (svn update).
  • Фиксация своих изменений в хранилище (svn commit).
  • Регулярное обновление рабочей копии последними зафиксированными изменениями (svn update).
  • Экспорт из репозитория (svn export). В отличии от создания рабочей копии, на выходе получается копия не содержащая метаинформации из svn (файлов .svn).

Ветвление

Ветвление является важным аспектом работы систем управления версиями, поскольку типичные приёмы управления версиями (по крайней мере, при разработке программного обеспечения) подразумевают использование ветвей. Subversion обладает достаточно развитыми возможностями для ветвления и слияния (однако не поддерживает слияние переименованных файлов и директорий).


Пример эволюции ветвей в Subversion

На рисунке условно показан пример эволюции ветвей в хранилище. Зелёным цветом показана основная линия разработки проекта (англ. 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), то есть требуют небольшого фиксированного количества времени и дискового пространства. Хранилище спроектировано таким образом, что при любом копировании происходит не дублирование данных, а создание ссылки на источник (аналогично жёсткой ссылке), однако этот механизм чисто внутренний — с точки зрения пользователя происходит именно создание копии. Благодаря высокой эффективности создания ветвей их можно создавать настолько часто, насколько это необходимо (однако слияние — необходимое дополнение к ветвлению — выполняется в Subversion медленнее, чем в других современных системах управления версиями).

Работа с ветвями

В целом работа на ветви не отличается от работы на основной линии разработки (trunk). Специфичные команды требуются только для действий, в которых задействовано более одной ветви. К таким командам относятся (помимо команды создания ветви svn copy):

  • svn switch — переключение рабочей копии на другую ветвь — используется для того, чтобы переключить имеющуюся рабочую копию на другую ветвь, при этом объём сетевого трафика минимален (зависит от того, насколько рабочая копия отличается от ветви);
  • svn merge — копирование набора изменений между ветвями — используется для слияния.

Как правило, полный цикл работы с ветвями включает следующие этапы:

  • создание ветви (svn copy);
  • переключение имеющейся рабочей копии на ветвь (svn switch) или создание новой рабочей копии путём закачки (svn checkout);
  • изменение файлов и директорий в рабочей копии, фиксация этих изменений (svn commit);
  • копирование в ветвь свежих изменений из родительской ветви, сделанных после ветвления (svn merge, svn commit);
  • копирование изменений с ветви в родительскую ветвь (svn merge, svn commit);
  • удаление ветви (svn delete), если её жизненный цикл закончен.

Слияние

Копирование изменений между ветвями

Слияние в Subversion — это применение к ветви набора изменений, сделанных на другой (или той же самой) ветви. Для осуществления слияния необходимо использовать команду svn merge — она применяет набор изменений к рабочей копии; затем нужно зафиксировать внесённые изменения (svn commit).

Терминология, связанная со слиянием, несколько запутана. Термин слияние (англ. merge) является не совсем точным, поскольку как такового объединения ветвей не происходит. Кроме того, не следует отождествлять слияние и команду svn merge: во-первых, для слияния нужно выполнить (помимо svn merge) разрешение конфликтов и фиксацию, во-вторых, применение svn merge не ограничивается слиянием.

Другие применения команды svn merge

Команду svn merge можно использовать не только для слияния. Фактически команда производит внесение в рабочую копию изменений, равных разнице между двумя директориями или файлами в хранилище, поэтому svn merge является универсальным средством для переноса изменений. Можно привести такие примеры использования команды svn merge:

  • откат уже зафиксированных изменений, в том числе целого диапазона ревизий;
  • удобный просмотр (в виде изменений в рабочей копии) разницы между двумя состояниями репозитория.

Создание хранилища

Для создания хранилища используется команда svnadmin create. Эта операция создаст пустое хранилище в указанной директории.

См. также

Источник — «http://wiki.altlug.ru/Subversion»
Личные инструменты