ОК, результаты получены - я нашел обходной путь.
Из-за устаревших процессов сборки (сборка, копирование, запутывание, сборка пользовательских инсталляторов, копирование в удаленную папку) я не могу легко разместить ветку рядом с основной веткой. Нужно заменить это.
Итак, если у меня есть Main и NewFeature, я хочу разархивировать Main и отобразить NewFeature на своем месте (т.е. использовать «c: \ Main» на сервере сборки и просто изменить исходный код, который там появляется)
Решение # 1 (самое простое, очевидное и логичное решение) заключается в использовании этих отображений:
- $ / NewFeature -> c: \ Main
Ожидаемый результат: структура кода NewFeature просто заменяет Main, а сервер сборки не знает, что он находится в другой ветке.
Фактический результат: ошибка с ошибкой «вы не отобразили $ / Main, даже если вы ее не используете».
Решение № 2 заключается в следующем:
- $ / Main -> c: \ IgnoreThisFolder
- $ / NewFeature -> c: \ Main
Это работает (оно подавляет предупреждение и, таким образом, позволяет сборке продолжать работу с MSBuild, не зная, что он строит в ветке). Однако это ужасно, и сборка получает весь исходный код ветки Main без необходимости.
Решение № 3 (не проверено, слишком дорого, чтобы попробовать, если я не знаю, что оно будет работать намного лучше, чем # 2):
- Переместите весь исходный код (из $ / Main, $ / Branches / Feature) в $ / Branches / Main и $ / Branches / Feature, чтобы получить согласованную глубину иерархии, и перепишите сценарий MSBuild для работы с этими новыми путями. .
Надеюсь, что тогда я смогу отобразить только нужную мне ветку и отредактировать TFSBuild.proj, чтобы перенаправить ее на эту ветку.
(Изменить: Да, это работает хорошо. Теперь мы реорганизовали всю структуру кода, чтобы все (все ветви) находились под общим корнем в одном командном проекте, и ветвление / построение больше не является проблемой - сейчас легко сделать все, что нам нужно. Хитрость заключается в том, чтобы вставить корневую папку в иерархию, чтобы вы могли выполнять ветвление на любом уровне. Я добавил небольшую настройку в скрипт сборки, чтобы мы могли передать ветку построить как параметр для MSBuild, так что теперь легко построить любой вариант. Любые ветви, над которыми мы не хотим работать, могут быть просто замаскированы, а сервер сборки остается счастливым.)
Резюме
Все эти решения (если использовать технический термин) отстой. Вы должны переназначить рабочее пространство (в этом случае это не просто: требуется 9 записей сопоставления, так что это подвержено ошибкам и утомительно), отредактируйте TFSBuild.proj, удалите весь исходный код и запустите сборку с / p: ForceGet = true для переключения сборки между ветвями. Так что переключение веток занимает около часа. Невероятно - это займет максимум несколько минут!
Я понимаю, что наш проект далек от идеальной настройки, но я не могу поверить, что переход в TFS должен быть таким сложным (это было очень просто в SourceSafe, Accurev и Perforce, так почему в TFS так больно ?).
Как все остальные организуют свои филиалы TFS? Как вы переключаете разработчиков между ветками? Как вы переключаете серверные сборки между ветками? Неужели это так больно?