Я думаю, что Changesets - это то, что вы хотите использовать. Хотя набор изменений идентифицирует определенный набор изменений кода, при выполнении операций в TFS на основе набора изменений TFS обычно интерпретирует его как «все изменения вплоть до набора изменений XXX».
Итак, допустим, вы попросили перейти на changeset 12345
. TFS получит все файлы, связанные с набором изменений, меньшим или равным 12345
- даже если они не являются частью 12345
.
Другой вариант, который вы можете сделать, - это ветвь, основанная на определенной дате / времени. Например, если у вас был основной выпуск 1 июня в 11:00, вы можете просто разветвлять весь код с этой конкретной даты и времени.
Все это, как говорится, в нашей организации мы используем этикетки. Да, ярлыки можно перемещать, но это не обязательно плохо, поскольку позволяет учесть ошибки. Например, допустим, у нас есть метка: ProdMove_June
.
Через некоторое время после июньского выпуска мы понимаем, что из-за сбоя процесса файл конфигурации не был включен в TFS (или файл был развернут из TFS, но его необходимо было изменить вне процесса SCM, чтобы ответить в чрезвычайной ситуации). Затем мы перемещаем этот файл в TFS и должны пометить его для всех будущих ветвлений. Если это так, то все, что нам нужно сделать, это переместить метку на этот единственный файл.
По моему мнению, все три из этих подходов верны, и мы фактически используем все три в нашей организации для построения, ветвления и получения кода. Я бы посоветовал вам надеть все три из них на поясе и использовать их там, где это необходимо.