TFS: метки против наборов изменений

Я пытаюсь предложить лучшие практики использования системы контроля версий TFS. Прямо сейчас, каждый раз, когда мы делаем сборку, мы маркируем файлы, проверенные в TFS, номером версии. Лучше или хуже этот подход, чем просто проверять файлы и указывать номер версии в комментариях? Можете ли вы затем использовать набор изменений, чтобы вернуться, если это необходимо, или ярлыки по-прежнему более универсальны?

Спасибо!


person laconicdev    schedule 05.06.2009    source источник


Ответы (4)


У них есть две разные цели: ChangeSets - это когда файлы действительно изменились, и вы хотите сохранить постоянную запись этого изменения. Ярлыки отмечают определенную версию файлов, чтобы вы могли легко вернуться к этому моменту. Если ваша сборка на самом деле не изменяет файлы в системе управления версиями, и вы не хотите записывать эти изменения. Вы должны маркировать.

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

person Alex    schedule 05.06.2009
comment
Ярлыки могут быть пугающими, их можно применить только к части кодовой базы, их можно изменить постфактум или удалить. Номер CS - постоянный. Его нельзя изменить, всегда должна быть установлена ​​последняя версия (если администратор TFS не использовал команду «Уничтожить» для удаления файлов из системы управления версиями, которые метка также не может восстановить). По моему опыту, этикетка хороша тем, что вы можете дать ей удобочитаемое имя и ее можно будет искать. Номер CS отлично работает как альтернатива. - person jessehouwing; 13.02.2013
comment
Ярлыки хороши, пока вы не поймете, что набор изменений, на который они ссылаются, не является последним набором изменений, когда вы применили ярлык. Кто-нибудь может это объяснить? - person toscanelli; 30.07.2018

Вы должны пометить версии исходных файлов, из которых состоит ваша сборка. Если вы используете TeamBuild, он сделает это за вас автоматически. Он объединяет имя вашего определения сборки, дату и номер сборки. Так что ничего делать не нужно.

Другой ваш вариант не очень условен и требует много ненужной работы. Если я правильно понимаю, вы должны проверить свои исходные файлы во время процесса сборки, а затем вернуть их обратно с номером версии, указанным в комментариях к возврату. Как сказал Алекс, это очень ресурсоемко с точки зрения вашего процесса сборки, а также вашего репозитория системы управления версиями. Более того, как вы получите исходные файлы для конкретной версии, если информация о версии встроена в комментарии? Это будет очень сложно, и вам придется сесть и написать свое собственное приложение, которое использует api управления версиями TFS для загрузки исходных файлов в рабочую область, выполнив поиск номера версии в комментариях к регистрации. Это создает ненужные сложности и головную боль.

Если вместо этого вы используете метки, вы можете получить по метке в VS IDE, чтобы загрузить исходные файлы, составляющие эту метку. Вы даже можете указать TeamBuild использовать метку вместо загрузки последних исходных файлов во время автоматизации сборки. Таким образом вы сможете легко создавать предыдущие версии вашего приложения. С помощью меток вы также можете применить более поздние наборы изменений к существующей метке, если были изменения кода, просто получив эту метку, а затем получив определенные наборы изменений, а затем выполнив быструю метку или создав совершенно новую метку.

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

person Mehmet Aras    schedule 05.06.2009

Прямо сейчас, каждый раз, когда мы делаем сборку, мы помечаем файлы, проверенные в TFS, номером версии.

Вам не нужно этого делать. TFS может ссылаться на состояние кодовой базы множеством способов, из которых метки действительно являются одними, но то же самое можно сказать о сборках и даже наборах изменений. Вы можете увидеть доступные способы восстановления определенного момента времени, выполнив Get Specific Version... и изучив варианты в раскрывающемся Type раскрывающемся списке:

Changeset
Date
Label
Latest Version
Workspace Version

Changeset позволяет получить сразу после любого набора изменений; Date очевидно; Label тоже, за исключением того, что при построении автоматически * создаются метки (выберите Label из этого раскрывающегося списка, затем посмотрите в диалоговом окне Find Label).

* Думаю, автомат! Если это не то, что мы специально создали там, где я сейчас нахожусь ...

person AakashM    schedule 05.06.2009
comment
Team Build может автоматически подписывать, когда вы выбираете опцию в настройках Build Definition (в расширенном разделе). - person jessehouwing; 13.02.2013

StackOverflow не позволяет мне комментировать приведенные выше ответы, поэтому я пишу это как новый «ответ». Я хочу прояснить некоторые из заблуждений, перечисленных выше.

Во-первых, использование меток TFVC БОЛЕЕ ресурсоемкое, чем использование наборов изменений. Гораздо больше. Такие команды, как Branch, Merge и Get by Label, работают медленнее. Для корпоративных серверов с огромными базами данных вы не хотите использовать ярлыки.

Во-вторых, сборки не создают метки автоматически, хотя шаги сборки по умолчанию включают в себя шаг по созданию метки.

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

В целом я рекомендую НЕ использовать ярлыки. Самая простая альтернатива - просто запомнить номер набора изменений для ваших сборок. Или, если вы хотите изолировать разные версии выпуска, вы должны создать ветки выпуска.

Этикетки подходят для небольших систем, но не подходят для крупных предприятий.

person Will Lennon - MSFT    schedule 04.08.2017
comment
В нашей настройке у нас есть процесс сборки на агенте VSTS, создающий метку для этой версии кода после успешной сборки. Это не снижает проблем с производительностью, о которых вы говорили, но делает ярлыки более надежными, поскольку они ссылаются на что-то столь же постоянное и определенное, как номер Chanset. Это позволяет нам легко найти версию кода, включенную в сборку, но если кто-то отредактирует или удалит метку, это не будет катастрофой. - person Philip Stratford; 22.08.2017
comment
Вы имели в виду, что это будет катастрофой? Поскольку, как сказал Леннон, пока ключ сборки неизменяемый, сборка надежна. Ярлыка нет, в то время как ChangeSet есть. - person Noble; 22.02.2020