Ищите компанию для Due Diligence с гарантией? Обращайтесь на сайте valen-legal.com!

Создание ветки


Создать ветку очень просто — при помощи команды svn copy делаете в хранилище копию проекта. Subversion может копировать не только отдельные файлы но и директории. Итак, вам нужно сделать копию директории /calc/trunk. Где эта новая копия будет находится? Где угодно — этот вопрос определяется правилами проекта. Допустим, что правилами вашей команды определено создание веток в директории /calc/branches хранилища, и свою ветку вы хотите назвать my-calc-branch. Вам необходимо создать новую директорию /calc/branches/my-calc-branch которая будет являться копией /calc/trunk.

Есть два способа создания копии. Сначала мы покажем неудачный способ, просто для того, что бы прояснить основные моменты. Для начала, создается рабочая копия корневой директории проекта /calc:

$ svn checkout http://svn.example.com/repos/calc bigwc A bigwc/trunk/ A bigwc/trunk/Makefile A bigwc/trunk/integer.c A bigwc/trunk/button.c A bigwc/branches/ Checked out revision 340.

Теперь создание копии заключается в простой передаче двух путей в пределах рабочей копии команде svn copy:

$ cd bigwc $ svn copy trunk branches/my-calc-branch $ svn status A + branches/my-calc-branch

В этом случае, команда svn copy рекурсивно копирует рабочую директорию trunk в новую рабочую директорию branches/my-calc-branch. Теперь команда svn status покажет, что новая директория запланирована для добавления в хранилище. Обратите внимание на знак «+» после буквы А. Это означает, что то что запланировано для добавления является копией чего-то, а не чем-то новым. При следующей фиксации, Subversion создаст в хранилище путем копирования директории /calc/trunk директорию /calc/branches/my-calc-branch, вместо повторного отправления через сеть всей информации рабочей копии:

$ svn commit -m "Creating a private branch of /calc/trunk." Adding branches/my-calc-branch Committed revision 341.

А теперь, простой способ создания ветки, о котором мы говорили раньше: команда svn copy может оперировать с двумя URL напрямую.

$ svn copy http://svn.example.com/repos/calc/trunk \ http://svn.example.com/repos/calc/branches/my-calc-branch \ -m "Creating a private branch of /calc/trunk." Committed revision 341.

В сущности, между этими двумя методами нет разницы. Оба варианта создают в правке 341 новую директорию и эта новая директория является копией /calc/trunk. Это показывает Рисунок 4.3, «Хранилище, содержащее новую копию». Обратите внимание на то, что второй метод, кроме прочего, выполняет немедленную фиксацию. [13]Эта процедура более проста в использовании, так как нет необходимости в создании рабочей копии, отражающей большое хранилище. Фактически, в этом случае вам вовсе можно не иметь рабочей копии.

Рисунок 4.3. Хранилище, содержащее новую копию

Легкие копии

Хранилище Subversion спроектировано особым образом. При копировании директории, нет необходимости задумываться о большом увеличении размера хранилища — на самом деле Subversion никогда не дублирует информацию. Вместо этого, создается новая сущность директории, которая указывает на существующие дерево файлов. Если вы пользователь Unix, это тот же подход, что используется для жестких ссылок. То есть копия, так сказать, стала «ленивой». Это значит, что если вы зафиксируете изменения одного файла из скопированной директории, то изменится только этот файл — остальные файлы будут продолжать существовать как ссылки на первоначальные файлы в первоначальной директории.

Вот почему часто в разговоре пользователей Subversion можно услышать о «легких копиях». Не имеет значения, насколько директория большая — для создания копии требуется очень небольшой фиксированный промежуток времени. Фактически, на этой функции основана работа фиксаций в Subversion: каждая правка является «легкой копией» предыдущей правки, с несколькими элементами лениво измененными в ней. (Что бы прочитать больше об этом, посетите веб сайт Subversion и прочитайте в документах по архитектуре Subversion о методе «всплывающих пузырьков».)

Конечно, эти внутренние механизмы копирования и деления информации скрыты от пользователя, который видит просто копии файлов. Основное здесь, это то, что копии легкие как по времени, так и по размеру. Делайте ветки так часто, как вам необходимо.



Содержание раздела