OSS Group OSS Group
>  Карта
>  Поиск
>  Контакты
>  OSS Group  ::  Admin  ::  Теги и ветви в Subversion
  
РегистрацияЗабыли пароль?

↓  Быстрый поиск по Wiki


Режим поиска:   И   ИЛИ

↓  Доступные Wiki

↓  Навигация по сайту

[]

↓  Последняя новость

Загрузка...

↓  На эту страницу ссылаются:

Get Firefox!
[~]

Теги и ветви в Subversion

Общие замечания по версиям, ветвям и тегам.

  • Версия проекта - состояние проекта в некий заданный момент времени. Версии проекта различаются по своим номерам.
  • Ветвление разработки (branching) - происходит при появлении необходимости вести параллельно разработку нескольких версий проекта. Например, дальнейшая разработка основной ветви проекта (добавление нового функционала, переработка структуры и т.п.) и поддержание (исправление ошибок) выпущенного релиза проекта.
  • Тег (tag) - зафиксированная версия проекта, с определённым названием. Как правило, служит для определения некого события в процессе разработки, например, выпуска очередной версии продукта.
  • Объединение ветвей разработки (merging) необходимо для внесения в одну ветвь разработки изменений, сделанных в другой ветви с момента (тега) распараллеливания разработки. Например, внесение в текущую разрабатываемую ветвь (trunk branch) исправлений ошибок в стабильной ветви проекта.
  • Ветвление разработки также может происходить при желании одного из разработчиков внести в проект существенные изменений. Посколько такие изменения, как правило, сопровождаются неким периодом неработоспособности проекта или невозможности его сборки, то имеет смысл произвести ветвление проекта, независимо от других разработчиков проводить изменения с ветвью (с выполнением отдельных обновлений репозитория), и после стабилизации ветви - слияние её с основной ветвью.

Особенности Subversion:

  • В Subversion каждая версия имеет уникальный номер - целое число (порядковый номер сделанного обновления проекта в репозитарии). Кроме того, версии проекта можно различать по их датам.
    • В случае задания временной отметки для обозначения версии следует помнить, что она обозначает версию проекта _на заданное время_. Т.е. версия от '2004-01-01' - это последняя версия, внесённая в репозитарий _до_ '2004-01-01T00:00:00+0000', а не версия, внесённая '2004-01-01T00:00:01+0000'.
    • В случае задания версии её номером необходимо помнить, что номер относится к обновлению репозитория. Т.е., при наличии в репозитории нескольких проектов - номера версий конкретного проекта отнюдь не последовательные; при наличии нескольких ветвей разработки - номера версий отдельных ветвей не обязательно последовательные, и т.д. Версии отдельных файлов - не последовательные, если эти файлы не менялись каждое обновление.
  • Виды записи номеров версий:
    • ''NNN'' - версия номер NNN
    • ''{TIMESTAMP}'' - дата версии{{Версия _к_ указанному времени}}, дата, время или временная отметка, в формате ISO.
    • ''HEAD'' - последняя версия в репозитории
    • ''BASE'' - версия рабочей копии
    • ''COMMITED'' - последняя версия изменений, внесённых в рабочую копию
    • ''PREV'' - версия до последней версии изменений, внесённых в рабочую копию (COMMITED-1)
  • Ветви и теги версий проекта в Subversion оформляются одинаково с точки зрения выполняемых команд. В связи с возможностью Subversion вести историю копий файлов, и ветви, и теги создаются с помощью _копирования_ проекта в директорию с требуемым именем.
  • Согласно принятых соглашений, структура директории проекта XXX следующая:
 XXX --- trunk -- dir1                 # Основная ветвь проекта (HEAD)
      |        `- dir2
      |
      |--branches                      # Ветви проектов 
      |         | 
      |         |--branch_A -- dir1
      |         |           `- dir2
      |         |
      |         `--branch_B -- dir1
      |                     `- dir2 
      |
      `--tags                         # Теги 
           |
           `-----version_A -- dir1
                           `- dir2

В начале проекта в репозитории создаётся каталог проекта XXX и подкаталоги trunk, branches, tags. Основная ветвь разработки проекта хранится в директории trunk. При необходимости создания ветви разработки выполняется команда svn copy trunk branches/branch_A. Возможно выполнении копирования непосредственно с URL репозитария. В последствии, при необходимости получения рабочей копии, возможно получение отдельно как trunk, так и branch_A и работа с ними по-отдельности: svn checkout file://repository/branches/branch_A. Т.к. Subversion было указано, что branch_a - копия trunk, возможно получение изменений произвольной версии branch_a по сравнению с trunk.

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

Создание ветви/тега

$ svn copy trunk branches/branch
$ svn commit
... или ...
$ svn copy <URL/trunk> <URL/branches/branch>

Отслеживание версий файла и изменений в нём

$ svn log --verbose <file>
$ snv log --verbose --stop_on_copy <file>
$ svn diff -r XXX:YYY <URL/trunk>

Слияние ветвей

$ svn merge -r XXX:YYY <URL/trunk>

Для слияния ветвей следует использовать именно merge, т.к. diff не отслеживает удаление/добавление файлов и директорий.

Для предпросмотра возможных изменений можно использовать

 $ svn merge –dry-run -r XXX:YYY <URL/branches/branch>

Получение заданной версии ветви

  • Целиком рабочую копию:
 $ svn checkout -r XXX <URL>
  • Переключение рабочей копии на заданную версию (включая переходы между ветвями):
 $ svn switch -r XXX <URL>

Этот путь отличается от checkout отсутствием необходимости выкачивать _всё_ дерево, передаются только изменения.

Удаление ветви

Выполняется как удаление каталога с ветвью. Естественно, удалённую ветвь можно восстановить, получив её существовавшую версию.

 $ svn remove <URL/branches/branch>

Дата создания: 2006-05-24 12:24:31 (Фетисов Н. А. (naf))
Последнее изменение: 2006-07-16 14:55:40 (Фетисов Ф. А. (faf))
Владелец: Фетисов Н. А. (naf)
Версия: 2  Все версии


 Комментарии (0)


Wiki::Admin   Оглавление  Карта раздела  Изменения за сутки  Изменения за неделю  Изменения за месяц



Valid XHTML 1.0 Transitional  Valid CSS!  [Valid RSS]