Как использовать теги контроля версий? - PullRequest
1 голос
/ 11 марта 2009

Я разработал своего рода шаблон веб-сайта для брошюр, на котором базируется большинство сайтов моих клиентов. Шаблон и производные сайты хранятся вместе в хранилище Subversion. Передовой (но стабильный) код живет в /trunk; и у каждого сайта есть своя ветка, чтобы упростить настройку. Теперь, когда я подхожу к выпуску 2.0, я чувствую, что должен смириться с тегами.

Насколько я понимаю, важные выпуски должны быть помечены. Тег - это просто указатель на конкретную ревизию, и он никогда не должен изменяться. Итак, предположим, у меня есть тег для версии 2.0 моего шаблона, и уже есть новый код в стволе. Если я хочу создать новую ветку на основе кода 2.0, как мне это сделать?

Разветвляюсь ли я /tags/2.0? Это не может быть правдой. Где бы я зафиксировал свои изменения? Я должен был сознательно обойти родословную моей ветви. Нужно ли вручную искать ревизию соединительной линии, которой соответствует /tags/2.0, и затем отводить эту ревизию в стволе? Это кажется ... громоздким. Я считаю, что до недавнего времени Subversion даже не хранила эту информацию!

Очевидно, я упускаю что-то фундаментальное. Краткое описание того, как теги на самом деле используются (в отличие от что они являются ) было бы полезно , Спасибо.

Редактировать: Там, где я сказал "ответвление /tags/2.0", я хотел сказать "проверить /tags/2.0". Но эта ошибка была также ответом на мой вопрос. По какой-то причине я никогда не думал о копировании тега. Глупо, верно? Но, на мой взгляд, теги были «окончательными».

И, кстати, я полностью понимаю, что теги - это просто соглашение. Меня смутило само соглашение, а не его базовая реализация.

Ответы [ 5 ]

2 голосов
/ 11 марта 2009

Всегда создавайте ветви из ствола, если только вы не хотите разветвиться от точки в прошлом (прошлый тег, ветвь или старая редакция ствола). Кроме того, вы не можете легко зафиксировать что-либо в теге; по крайней мере, клиент TortoiseSVN защищает вас сообщением.

2 голосов
/ 11 марта 2009

Я положил кровоточащий край (но стабильный) в / багажник. Когда функции для выпуска были завершены, я копирую / trunk в /branches/Foobar-1.2.3.X. Я немедленно копирую /branches/Foobar-1.2.3.X в /tags/Foobar-1.2.3.0 (позже это облегчает различия, я могу изменить /branches/Foobar-1.2.3.X в /tags/Foobar-1.2 3.0 и посмотрим, что изменилось в моей ветке, так как к этому времени / транк скорее всего будет другим). Окончательная разработка продолжается с использованием функций в /branches/Foobar-1.2.3.X, и когда я делаю релизы, я копирую в /tags/Foobar-1.2.3.1, /tags/Foobar-1.2.3.2 и т. Д. предназначен только для извлечения кода из /tags/Foobar-????.

Это работает и для «специальных» веток: /branches/Foobar-WhizzBangFeature-1.2.X

1 голос
/ 11 марта 2009

Да, создайте ветку с svn copy в папке /branch репозитория для версии, которую вы хотите разветвить.

Например:

/branch
/tags
  /1.0
  /2.0
/trunk

Тогда для ветки на 2.0:

/branch
  /something2.0
/tags
  /1.0
  /2.0
/trunk
0 голосов
/ 11 марта 2009

Я собираюсь предположить, что вы используете Черепаху SVN. Предположим, у вас есть следующая ситуация:

/trunk
/braches
   /branch1
   /branch2
/tags
   /1.0
   /2.0

Тогда все, что вам нужно сделать, это:

  • открыть браузер репозитория черепах
  • зайдите в корень и раскройте вещи, чтобы вы могли видеть, что вы делаете
  • выберите папку /tag/2.0
  • Удерживая нажатой клавишу Ctrl, скопируйте его в папку / branch
  • переименовать новую папку (или нет)

И это все. Затем вам нужно проверить /branches/tag/2.0 (или как вы там его называли), чтобы поработать над ним.

Что вам нужно сделать, так это всегда думать о SVN как о файловой системе. Имена и значения, которые вы даете в этой файловой системе, зависят от вас. Например, тот факт, что вы не можете редактировать «теги», является просто соглашением - лежащая в основе файловая система не заботится, редактируете ли вы их или нет.

0 голосов
/ 11 марта 2009

Вы делаете копию (используя 'svn copy') своего каталога тегов в каталоге / branch (или где бы вы ни хранили свои ветви), возможно, используя исправление 2.0 или что-то похожее на имя ветви (отличное от имени тега).

Это так просто, как только может. В SVN нет тегов и веток, просто каталоги и файлы. Это все зависит от вашей политики.

Возможно, более естественным способом было бы сначала создать ветку 2.0, стабилизировать код в ветке, а затем создать тег из ветви.

...