Организация исходного кода в TFS 2010 - PullRequest
19 голосов
/ 21 апреля 2010

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

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

Ясно, что каждое веб-приложение - это собственный проект, но куда мне поместить общие компоненты? Должен ли каждый компонент быть в своем собственном проекте с отдельными сборками и рабочими элементами?

Есть ли лучшая практика или рекомендуемый способ сделать это специально для TFS 2010?

Ответы [ 4 ]

13 голосов
/ 06 мая 2010

Лучшая практика для этого - иметь все необходимое для создания решения в папке Main / Trunk. Мы используем следующий формат:

 "Project 1"
   "DEV" (Folder)
      "Feature 1" (Branch)
      "Main" (Root branch)
   "Release" (Folder)
      "Release 1" (Branch)
   "RTM" (Folder)
      "Release 1.0" (Branch)
      "Release 1.1" (Branch)

Это сохраняет все ваши ветви на одном уровне, поэтому у вас нет никаких сомнений относительно того, какая ветка и какая папка.

Это структура вашего командного проекта, а как насчет фактической структуры папок в каждой из ветвей:

Main (Root branch)
  "Builds" (Folder that contains all of the MSBuild and Workflows for building)
  "Documents" (Folder that contains version specific documents)
  "Deployment" (Folder that contains config required for deployment | We use TFS Deployer from Codeplex)
  "Setup" (Folder contains all of the setup resources)
  "[Company].[Namespace].*" (Folders that contains a project)
  "Tools" ( Folder for all your nuts and bolts)
     "Toolname" (Folder for a specific tool or reference library)

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

В любом случае, есть центральный проект «Инструменты», который вы всегда обновляете до последней версии, и ваша команда оттуда тянет, но не имеет внешних зависимостей. Это делает кошмаром создание автоматизированных сборок и заставляет ваших разработчиков обновляться, даже если это не подходящее время. Кроме того, убедитесь, что вы рассматриваете любую внешнюю зависимость как инструмент, даже если она принадлежит другой внутренней команде.

Ссылки: TFS Deployer

5 голосов
/ 23 апреля 2010

У меня есть два ответа: что мы делаем и что я предлагаю для вас.

Для нас у нас есть набор веб-приложений, каждый из которых имеет МНОГИЕ общие компоненты.Таким образом, хотя это около 50 различных сборок (VS Projects) и 5-10 решений (в зависимости от того, как вы на это смотрите), все они очень сильно перекрываются, что означает, что мы хотим использовать TFS для каждого разработчика, а нечем ветвление и объединение этих перекрывающихся ресурсов.Таким образом, мы фактически храним все это в одном проекте TFS.Вот как у нас есть наши настройки (имена изменены, чтобы иметь смысл для вас):

"Official Projects" (Collection)
    "Production Applications" (Project)
    "Technology Proof of Concepts" (Project)
    "Reference Projects" (Project) - this is a simple solution/projects using our architecture to make our architecture easier to understand as people join our team. Other reference apps will go here in the future.
    "TFS Configuration" (Project)
"Playground" (Collection)
    "John Doe" (Project)
    "Jane Doe" (Project)
    "Security Team" (Project)
    "Production Test" (Project)

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

  1. Каждый проект, за исключением нескольких общих сборок (я думаю, что журналы, безопасность и другие сборки утилит, которые являются общими для всей компании), являются несвязанными проектами.
  2. Общие / общие сборки не меняются регулярно, поэтому вы можете использовать ссылки DLL, а не ссылки на проекты, где вы всегда используете последнюю актуальную версию кода.
  3. (Предположение на основе TFS, поскольку я все еще учусь) Вы можете выполнять ветвление между проектами из одной и той же коллекции, но не можете выполнять ветвления между коллекциями.
  4. Кроме вышеупомянутых общих сборок, никакой другой код не передается группам..

Итак, с этими допущениями я хотел бы пойти примерно так:

"Common Resources" (Collection)
    "Source" (Project) - everything goes here such as logging assemblies, security assemblies, etc.
    "Version 1" (Project) - Branch as you "rev" your common assemblies so people have access to older versions.
    "Version 2" (Project)
    "Version 3" (Project"
    etc.
"Team 1" (Collection)
    "Project 1"
    "Project 2"
    "Project 3"
    "Project 4"
    "Project 5"
"Team 2" (Collection)
    "Project 1"
    "Project 2"
    "Project 3"
"Team 3" (Collection)
    "Project 1"
    "Project 2"
etc.

Делая это таким образом, вы обращаетесь к общим сборкам через ссылки на DLL.Вы, как команда или разработчик конкретного проекта, решаете, когда вы начнете использовать более новую версию общей сборки.Чтобы сделать это, вы просто получите последнюю версию ветки этой версии, а затем добавите ссылку на нее.Если мое предположение № 3 неверно, то, надеюсь, вы можете сделать что-то лучше, чем это.В противном случае у каждого проекта есть свое собственное пространство (которое может содержать более одного решения / проекта VS, что является хорошей идеей), и у вашей команды есть своя собственная коллекция, чтобы оставаться в стороне от других команд.

Просто мои 0,02 долларастоит ...

4 голосов
/ 19 апреля 2011

Мы взяли простой подход к сторонним компонентам и создали для них отдельный проект.Затем, когда другой проект должен ссылаться на сборку или DLL, мы разветвляем папку, в которой находится сборка, в папку «ThirdParty» в целевом проекте.

Это также дает нам механизм для развертывания обновлений до ThirdПостепенное собрание партий с использованием прямого слияния из базовой папки.

2 голосов
/ 02 августа 2010

Используйте рабочие пространства, они не только работают в Team Collections, но и будут работать с большинством методов управления версиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...