Понимание ограничений ярлыка - PullRequest
8 голосов
/ 30 марта 2012

A blog состояний

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

Это неединственное место, где я читал похожую информацию о ярлыках TFS.Отсутствие истории достаточно ясно.Вторая часть "этикетки не хранят копии версий ..." неясна.Фактически, я создал тестовый проект> пометил его> удалил файл> выполнил Get by Label, и файл вернулся.Так к чему это относится?Изменились ли функциональные возможности меток в TFS с недавних пор?

Я понимаю, что удаление файла фактически не удаляет историю, не в этом ли причина?Другими словами, если я запускаю

tf destroy "$ / MyTeamProject / Project / FileName.cs"

Это то, что означает удаление файла?Если это так, то это кажется необычайным обстоятельством, которое можно даже рассмотреть.Я имею в виду, это преднамеренное неустранимое удаление истории.В этом случае набор изменений не будет улучшаться по сравнению с ярлыками.

Ответы [ 3 ]

2 голосов
/ 31 марта 2012

Когда мы применяем метку, мы делаем это для версии контроля версий в определенный момент времени.Интуитивно понятно, что поскольку мы изначально создали моментальный снимок управления исходным кодом в определенный момент времени, можно предположить, что моментальный снимок представляет исходный код в определенный момент времени.

Это неверно.Метки могут быть отредактированы после создания.

Концептуально метка определяет продукт и исправляет ошибки продукта ( источник ).Пример из реального мира может помочь.Допустим, у нас есть продукт под названием AlphaBoogerBear.AlphaBoogerBear - это продукт, а не версия (подумайте перед выпуском Windows-имен).AlphaBoogerBear может быть превращен в Label, AlphaBoogerBearLabel.Мы выполняем релиз AlphaBoogerBear.Есть некоторые ошибки.Мы исправим их.

Теперь вернемся и отредактируем AlphaBoogerBearLabel, чтобы включить исправления.Метка больше не представляет снимок в определенный момент времени.Вместо этого он представляет собой наиболее стабильную версию AlphaBoogerBear.

Наконец, мы переходим к BetaBoogerBear.У нас есть возможность вернуться назад и взять ярлык, который представляет старый продукт в его лучшей версии во времени.

По моему мнению, если требуется снимок версии контроля версий, лучше перейти на ветку.Если требуется снимок с возможностью редактирования, представляющий выпуск продукта, тогда полезно использовать метку.Хотя это кажется трудным балансом доверия и удобства.

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

1 голос
/ 31 марта 2012

Я не уверен, что подразумевается под предложением о том, что ярлыки подвержены удалению файлов.Но у вас все в порядке, обычное удаление файла не повлияет на метки, но уничтожение будет.

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

0 голосов
/ 02 апреля 2012

Насколько я понимаю, метка в TFS - это набор / коллекция changesets .

Допустим, вы пометили каталог с двумя файлами в нем. Метка должна состоять из трех наборов изменений: по одному для каталога и по одному для каждого файла. Удаление одного из этих файлов в TFS приведет к созданию нового набора изменений для каталога, поэтому выполнение операции «Получить по метке» на этом этапе вернет удаленный файл «назад», поскольку он содержит набор изменений до удаления. Уничтожение файла приведет к удалению его из всех записей ревизий, в которых оно появилось, что также приведет к уничтожению информации в метке.

Поскольку метка идентифицируется только по названию, ее также легко перезаписать новой меткой, уничтожив старую информацию. Параметр /child этой команды может несколько изменить это поведение: использование /child:merge сохранит наборы изменений, которые были ранее записаны вместе с новым, /child:replace заменит старый набор изменений на новый. В приведенном выше примере ни одна из этих альтернатив не будет иметь никакого значения, поскольку функция «Получить по метке» будет по-прежнему получать наибольший набор изменений.

...