Пометка в Subversion - как мне принять решение о продолжении работы над моим транком по сравнению с новым тэгом?

Я управляю Tortoise SVN для управления проектом. Очевидно, что принципы тегирования применимы к любой реализации SVN, но в этом вопросе я буду ссылаться на некоторые специфичные для TortoiseSVN диалоговые окна и сообщения.


Мой рабочий каталог и структура хранилища Subversion имеют корневой каталог Source и каталоги Trunk, Tags и Branches под ними. (Я не мог понять, как сделать многоуровневую иерархию с отступом в уценке без использования маркеров, поэтому, если бы кто-то мог отредактировать и исправить это, я был бы признателен.)

Я работаю из каталога Trunk в моей рабочей копии, и он указывает на каталог Trunk в репозитории. Я хочу применить тег "Release1", поэтому я выбираю пункт меню "Branch/tag..." и задаю путь репо в качестве моего тега [repo_path/bla/Source/Tags/Release1". Это диалоговое окно дает мне возможность "Переключить мою рабочую копию на новую ветку / тег".

Я понимаю, что если эту опцию оставить не отмеченной, будет создана новая ветка "Release1" в разделе / ​​Tags", но моя рабочая копия останется на предыдущем пути" Магистраль ". Если я проверю эту опцию (или воспользуюсь командой Switch) Я понимаю, что моя рабочая копия переключится на новую ветку "Release1" в разделе "/Tags".

Где я скучаю по концепции, как принять это решение. Не похоже, что я хочу переключить свой рабочий каталог на недавно созданный тег, поскольку по определению (?) Я хочу, чтобы этот тег был моментальным снимком моего кода на определенный момент времени. Если я не переключу рабочий каталог, я продолжу работать с Trunk, и когда я буду готов сделать еще один снимок, я сделаю еще один тег. И так далее...

Правильно ли я понимаю это право или я что-то неправильно формулирую в предыдущем абзаце (например, заявление о нежелании переключаться на тег, поскольку тег должен представлять моментальный снимок времени) или что-то иное упускается из-за того, как принять это решение?

3 ответа

Решение

В Subversion тег не является "меткой", которую вы помещаете в ревизию; это копия ствола (или ветви, или чего-то еще) в определенный момент времени. Будучи просто скопированным каталогом, вы можете зафиксировать его; но ты не должен.

Как только вы сделаете тег, вы должны оставаться там, где вы были (ветвь или ствол) и работать там, не переключайтесь на каталог тегов. Если вы зафиксируете каталог тегов, вы измените его содержимое, и он больше не будет использоваться в качестве "снимка".

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

В Subversion технически не существует такой вещи, как "ветвь" или "тег". Для SVN они просто копии каталога. Они особенные только потому, что вы относитесь к ним.

Tag = сделать копию проекта, но не трогайте его после создания копии. Обычно вы не хотите переключаться на тег, потому что вы (обычно) не будете вносить в него никаких изменений.

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

ПРИМЕЧАНИЕ #1: Хотя в самом SVN нет особого подхода к стволам / ветвям / тегам, TortoiseSVN имеет подсказку для пользовательского интерфейса, препятствующую фиксации тега. Если вы извлекаете тег (или делаете тег и переключаетесь на него), выполняете некоторую работу, а затем пытаетесь зафиксировать, TSVN отобразит предупреждающее сообщение. ЦВН пытается угадать, что ты на самом деле пытался сделать.

ПРИМЕЧАНИЕ №2. Вам не обязательно нужен тег для моментального снимка. Номер ревизии репо делает это за вас.

Давайте сделаем проще:

Рекомендуемый способ создания структуры вашего проекта:

  • svnRoot / projectName / trunk (актуальная линия разработки)
  • svnRoot / projectName / tags / Release_X.XX (воспринимайте теги как метки, но они просто копии)
  • svnRoot / имя_проекта / branch / Release_X.XX (копия, которую можно обновить, ветвь подпроект)

Никогда не передайте по тегу (вы можете, но не должны).

Если вам нужно развивать somenthing, не разрушая чужую работу, создайте ветку, затем объедините свою ветку со стволом, но будьте осторожны:)

Другие вопросы по тегам