Лучшая практика для управления SVN с помощью решения с участием нескольких проектов - PullRequest
1 голос
/ 02 февраля 2010

Перед тем, как начать, следующее основано на знаниях, полученных в результате использования веб-проектов TortoiseSVN 1.6.x и ASP.NET с Visual Studio 2008 в качестве примера.

CaseИсследование

Скажем, в сценарии счастливого дня типичная структура хранилища subversion может быть где-то похожей на:

/trunk
    /Solution1
        /ProjectA
        /ProjectB
        /ProjectC
/tags
    /Solution1
        /version_1.0-rc
        /version_1.1
/branches
    /users
        /travis
            /Solution1
        /john
            /Solution1
  • Solution1 - решение Visual Studio, содержащее1 ко многим проектам Visual Studio.
  • Пользователи работают над собственной ветвью решения, время от времени сливаясь с магистралью.Никто не работает непосредственно над транком.
  • Теги создаются из транка всякий раз, когда есть публичный релиз.

Однако в реальном мире структура проекта не так проста, какмногие проекты Visual Studio совместно используются различными решениями Visual Studio.Хранилище больше похоже на:

/trunk
    /CandyLand
        /Candy.Web.Pages
        /Candy.Web.Services
        /Candy.Tests
    /LollyApp
        /Lolly.App.WinForm
        /Lolly.App.Services
        /Lolly.Tests
    /Fundamental
        /Fundamental.BusinessObjects
        /Fundamental.DataAccess
    /Components.ExternalLibraries
        /Subsonic-2.2
        /Moq-3.1
        /Lucene.NET-2.0

Где в примере 2 продукта Candy и Lolly, а общие компоненты (проекты Visual Studio, библиотеки DLL) будут в Fundamental и Components.ExternalLibraries папки соответственно.

Предположим, что отработана магистраль, чтобы работать на CandyLand Visual Studio Solution, мне нужно извлечь его файлы из репозитория, а также необходимые компоненты, поэтому структура решения может выглядеть примерно так:

+ CandyLand
    + Candy.Web.Pages
    + Candy.Web.Services
    + Candy.Tests
    + Fundamental.BusinessObjects
    + Fundamental.DataAccess
    + Subsonic-2.2
    + Moq-3.1

Перемещение папок извлечения и вложенных папок может быть немного раздражающим, мы используем пакетные сценарии, чтобы сделать это для нас.

Задача

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

То же самое с тегами, я не могу создать тег, который содержит как снимок версии решения продукта, так иего общие компоненты.

.

Я иду в неправильном направлении?Я сделал этот репозиторий слишком сложным для управления?

1 Ответ

1 голос
/ 02 февраля 2010

Используйте svn: externals для включения папок в Candyland.

В приведенном ниже примере * отмечает внешнее:

+ CandyLand
    + Candy.Web.Pages
    + Candy.Web.Services
    + Candy.Tests
    * Fundamental.BusinessObjects
    * Fundamental.DataAccess
    * Subsonic-2.2
    * Moq-3.1
...