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

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


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

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 21 мая 2010

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

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

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

1 голос
/ 21 мая 2010

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

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

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

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

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

0 голосов
/ 01 марта 2012

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

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

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

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

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

...