Структура Управления Версиями Team Foundation Server
я работаю над стандартизацией структуры управления версиями для развертывания Team Foundation Server на Новый год. Я начал с использования Майкрософт Сервера Team Ветвления Руководством документация доступна на сайте CodePlex.
я надеялся получить некоторые отзывы и ответы на несколько конкретных вопросов, которые у меня есть о предлагаемой структуре. Когда дело доходит до структурирования управления версиями в TFS, я узнал, что есть так многие "стандарты" выбрать из того, что на самом деле нет стандарта.
во-первых, я изложу и опишу решения и использование.
$/
{Team Project}/
{Subproject}/
Development/
Trunk/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Branches/
{Branch Name}/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Integration/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Production/
Releases/
{Release Version}/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Branches/
{Branch Name}/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
общая логика заключается в том, что командный проект может содержать либо один логический проект (где не было бы {Subproject}
запись) или несколько связанных проектов в виде продукта или набора инструментов. Три основных контейнера называются Development
, Integration
и Production
.
внутри Development
контейнера Багажник, есть положения для обоих проектов, которые составляют продукт в Source
папка с соответствующими модульными тестами, доступными в . Большая часть незначительного развития произойдет в стволе, с ветвлением, доступным через Trunk
папки-двойники Branches
папка, которая действует как ветвящийся контейнер. Один или несколько файлов решений будут жить в Trunk
, позволяющ для ветвей на этом уровне захватить решение, источник, и блок тесты.
на Integration
контейнер, часто называемый "main" в реализации без TFS, используется исключительно для интеграции наборов изменений из Development
для создания стабильной и тестируемой сборки. Первоначально он создается как ветвь из Development
контейнер как только тестируемый продукт был достигнут. Сборки из этого контейнера будут использоваться для нашей среды тестирования и среды нагрузочного тестирования. Мы решили включить нагрузочное тестирование с тестируемыми сборками, чтобы мы могли отслеживать изменения в производительность, возможность быстрой изоляции изменений, которые, возможно, способствовали какие-либо нарушения.
Production
использовано для того чтобы произвести строения пре-продукции и качества продукции. Первоначально он создается как ветвь из Integration
контейнер после того, как стабильная сборка была рекомендована для выпуска. В Releases
папка, структура" ветвь выпуском " следует, обеспечивая snapshotting и изоляцию в одном месте. (Например, когда Release 1.1
готов к пре - продукция строит, конюшня Integration
контейнер разветвляется на новый на Production/Releases
структура. Последующие RCs и RTWs / RTMs также продвигаются в эту папку.) Ветвящаяся структура также присутствует, как видно из Branches
контейнер. Это позволяет использовать "исправления", обычно маркер ревизии (Major.Незначительный.Пересмотр.) Ветвь создается из текущего выпуска и объединяется обратно в новый маркер редакции-как Release 1.1.1
. Набор изменений будет реверсивно интегрирован к Development
контейнера Trunk
С момента его принятия.
мы считаем, что эта структура является справедливым балансом между надежностью и сложностью. Но есть несколько назойливых вопросов, которые я не могу логически вписать в модель. Они:
Team Build - в Development
и Integration
контейнеры первоначально будут начинаться как ночные сборки, в конечном итоге переходя к непрерывной интеграции (CI). Контейнер продукции будет вручную построенный.
где должны жить определения сборки?Edit-на основе нескольких ответов папка TeamBuildTypes была перемещена в магистраль и разветвлена на соответствующие контейнеры. Это, однако, приводит к новому вопросу (следует).имея папку TeamBuildTypes в соответствующих контейнерах, означает ли это, что все определения сборки будут воспроизводиться между соответствующие папки? Например, наличие определения сборки для сборки качества разработки, а также тестируемых сборок и т. д. все живут во всех папках TeamBuildType по всей структуре.
Документация - мы используем Sandcastle для создания документации. В частности, мы также используем Sandcastle Help File Builder для управления производством. Это создает файл проекта в формате, специфичном для SFHB.
должна ли сгенерированная документация храниться в структуре управления версиями?
должна ли документация создаваться для каждого контейнера или она имеет значение только для сборки предварительного производства и качества производства?
чтобы сохранить быстрое локальное время сборки, должно ли создание документации принадлежать определению сборки?
где должен SHFB-специфический файлы живут? Мой первоначальный намек-поставить его как Пэрая согласен с recommondations, что это будет равныйSource
иTests
папки.Source
иTests
. Схема изменена, чтобы отразить это изменение.
Сторонние Двоичные Файлы
должны ли двоичные файлы (элементы управления, библиотеки и т. д.) храниться в системе управления версиями?
если это так, Должно ли это быть это собственный командный проект?
Общие Документы - non-произведенная документация, как требования, проектные документы, планы испытания, etc. не будут отражены в папке в структуре управления версиями. После некоторых исследований и обсуждений с моими разработчиками и коллегами использование встроенной папки "документы" в Team Explorer дает больше преимуществ, поскольку она отражает структуру портала командного проекта, а некоторые (бизнес-пользователи не нужна дополнительная сложность изучения аспекта управления версиями TFS.
я обновлю структуру, как я получаю ответы на вопросы, чтобы обеспечить более четкую картину. Я также приветствую любые другие замечания, касающиеся возможных изменений. Если у меня есть какие-либо другие вопросы, я обязательно изменю этот пост.
изменения:
уточнение.
Source
иTests
папки живут подIntegration
контейнер, а также.и Мика, и Джош подняли отличные моменты относительно сторонних двоичных файлов. Вопрос добавлен относительно вопроса.
генерация документации может быть медленным. Добавлен вопрос о том, Должно ли создание документации принадлежать определенному типу командной сборки.
добавлено разрешение, связанное с не сгенерированным документы, такие как требования, проектной документации, планов тестирования и т. д.
добавлено разрешение, связанное с папкой TeamBuildTypes для определений сборки.
основываясь на различных отзывах, переместил папку TeamBuildTypes на уровни магистрали / ветви.
5 ответов
Мне нравится ваша идея поместить файлы Sandcastle в качестве однорангового источника и тестов, я бы добавил папку документации, которая затем будет содержать файлы sandcastle и, возможно, фактическую документацию.
есть определенно различия во мнениях, и я уверен, что я буду понижен для этого (так как я был раньше). Я бы поместил сгенерированную документацию в TFS по нескольким причинам:
- вам понадобится ваша документация с каждым выпуском, и использование TFS-это простой способ обеспечить, чтобы ваша документация оставалась в правильном месте.
- используя TFS для хранения, это означает, что каждый будет знать, куда идти, чтобы получить документацию.
одна вещь, которую я не вижу, с которой я всегда борюсь, - это где сторонние зависимости, возможно, они принадлежат к источнику, поэтому они с каждым проектом, хотя если вы хотите поделиться ими с проектами, вы можете добавить новый верхний уровень узел.
редактировать
для моих двоичных файлов я обычно заканчиваю с
$ / ThirdParty / компания / продукт / версия / Src (необязательно)
Так, например, у меня есть
$ / ThirdParty/ Microsoft/ EntLib/ 3.1 4.0 ComponentArt/ Web-интерфейс/ 2008.1/ Src
Мне нравится добавлять источник, мне пришлось исправлять источник CA, который я ненавижу делать, но когда третья сторона не исправляет ошибку, которую вы придется прибегнуть к этому.
большой макет и объяснение. Я боролся с теми же проблемами. У меня очень похожая структура. Мой немного отличается.
Development/
Trunk/
Binaries/ -- Shared libraries
Source/
Test/
Docs/ -- Documentation
TeamBuildTypes/ -- Build definitions
- добавление папки двоичных файлов позволяет иметь одно место в ветке, где все ваши проекты могут ссылаться на общие библиотеки
- мы помещаем документацию здесь, чтобы она могла путешествовать вместе с ее конкретной веткой.
- наши определения сборки находятся на уровне разработки, так как мы можем понять они в одном месте для всех ветвей, но это определенно может быть на уровне ветвей, что может иметь больше смысла.
должны ли двоичные файлы (элементы управления, библиотеки, так далее.) храниться в системе управления версиями? Если да, то должна ли это быть собственная команда Проект?
Я думаю, что они определенно должны контролироваться источником, но я не вижу причин помещать их в свой собственный командный проект. Одна проблема, с которой нужно быть осторожным, - это TFS по какой-то причине обрабатывает двоичные файлы немного разный. У меня были проблемы, когда я обновил двоичные файлы в системе управления версиями, но "получение последней" на других машинах не вызывает обновления файлов. Иногда вам нужно сделать "получить конкретную версию "и проверить опцию" перезаписать неизмененные файлы " для этого конкретного файла.
вы должны положить папку TeamBuilds под багажник. Это было невозможно в TFS2005, но Microsoft исправила его для 2008...
причина этого в том, что ваша сборка может измениться с более новой версией (например: новые схемы упаковки, другое тестирование и т. д.) что может сделать его несовместимым со старыми релизами обслуживания. Вот почему вы должны соединить сборку команды с версией кода.
таким образом, скажем, вы выпускаете версию 1.0 и помещаете ее под Выпускает папку. Вы сможете создавать его и выпускать исправления во время работы над v2.0 в магистрали разработки (что может потребовать изменения сборки)
для ваших двоичных файлов - очевидно, что единственными двоичными файлами, которые должны находиться под контролем версий, являются "сторонние" сборки, которые вы не "строите" как часть любой автоматической сборки. Если у вас есть собственные библиотеки, источник которых находится под управлением версий и т. д.-Вы должны изучить различные стратегии построения и синхронизации и т. д.
затем я организовываю их, как Josh , а затем использую ветвление для "копирования" двоичных файлов в папку _ExternalReferences, которая является одноранговой Папки проектов .NET в дереве решений. Это очень эффективный способ на стороне сервера, поскольку TFS Version control хранит только "дельты" - поэтому, по сути, каждое" дублирование "этих двоичных файлов во многих проектах по существу похоже на"указатель".
одна вещь, которую я бы рекомендовал, - не использовать местоположение по умолчанию для командных сборок и включить его в уровень "branchable", потому что, когда вы ветвитесь по различным причинам (скажем, рекламные акции кода), Вы захотите, чтобы ваши сценарии сборки были разветвлены и синхронизированы с ним.
также было опубликовано новое и более конкретное руководство по сценарию, а также в http://www.codeplex.com/TFSBranchingGuideII