2008-08-19 4 views
12

У меня есть несколько проектов C# .dll, которые являются общими для многих приложений. В настоящее время у меня есть один большой репозиторий. У меня есть каждая DLL, хранящаяся как отдельный проект в репозитории, и каждый проект приложения, сохраненный как проект в том же репозитории.Лучший способ структурирования репозитория в проектах Subversion для Visual Studio?

Недавно я переключился на Subversion для управления источником, и я боюсь, что я не очень хорошо структурировал репозиторий. Я хотел бы услышать, что делают другие.

+2

Название этого вопроса действительно должно быть изменено на первое предложение. Вы не можете сказать, в чем вопрос, пока не начнете читать более подробное описание. – 2008-09-20 18:55:51

+0

Вот как я это сделал. Я также беспокоился о том, как я создал репозиторий, но, похоже, он работает для нас. Monroecheeseman 2008-08-25 12:20:12

ответ

5

используя ответвление/ствол/метки структура хранилища довольно стандартная, но если я Если вы правильно относитесь, ваша проблема в том, что у вас есть набор общих проектов dll, которые используются в нескольких проектах. Это может стать сложной задачей.

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

Предположим, что я запускаю новое приложение под названием StackOverflow.Web, которое должно ссылаться на Common.Helpers.

Обычно вам нужно создать новый файл решения и добавить новый проект Stackoverflow.Web и добавить существующий проект Common.Helpers, а затем связать его с новым проектом Stackoverflow.Web.

Обычно я пытаюсь создать репозиторий для проекта Common.Helpers, а затем в subversion укажу его как external. Таким образом, вы можете сохранить код под контролем источника в одном месте, но все равно использовать его отдельно в нескольких проектах.

9

Subversion репозиториев типичны подразделить на:

branch/ 
tags/ 
trunk/ 

Вы бы либо поместить все ваши DLL и прикладных проектов в ствол, а затем использовать ветвь и теги для всех из них при необходимости также:

branch/ 
tags/ 
trunk/ 
    project1/ 
    project2/ 

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

project1/ 
    branch/ 
    tags/ 
    trunk/ 

project2/ 
    branch/ 
    tags/ 
    trunk/ 

Обратите внимание, что эта практика является просто конвенцией, и ничто в SVN не требует (или действительно продвигает) выполнение этого именно таким образом. Однако к нему привыкли все. Таким образом, вы будете делать людям услугу, чтобы идти вперед.

Чтобы уточнить, багажник - это место, где будет происходить ваше основное развитие. Если вы хотите пометить конкретную версию (например, версию выпуска), просто нажмите svnкопия проект в каталог тегов. Кроме того, просто скопируйте код в каталог , если вы хотите сделать что-то драматическое или продолжительное и не хотите препятствовать прогрессу в магистрали . Позже вы можете СВНслияние вашей ветви обратно в ствол, когда он готов к действию!

Если вы хотите, чтобы исправить неудачи в текущем хранилище Subverion, а затем просто использовать СВНЫдвижения переместить их. В отличие от процесса удаления и добавления CVS, перемещение сохранит историю версий для нового местоположения.

0

если ваши подпроекты могут быть выпущены в разных версиях (например, элементы управления, веб-части, ect ...), То это может иметь смысл, чтобы построить свою структуру, как это:

Решения
Проект 1

  • филиал
  • Метких
  • Магистральных

проект 2

  • Отделение
  • Метки
  • Магистральные

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

В противном случае наиболее общая структура является:

  • Отделение
  • Метки
  • Магистральные
  • Docs (необязательно)
0

Я хранил все в хранилище, чтобы упростить для разработчиков (или перестроить devboxes) проверку на выход из SVN, а затем запустить сборку (со всеми необходимыми сборками в относительных путях). Если у вас есть несколько проектов, которые должны быть отдельными, это также побуждает команду ваших общих компонентов предоставлять высококачественные сборки. Это могло бы следовать нормальному выпуску в производственный менталитет, где общий сборник будет обновляться в ваших проектах вниз по течению. Это очень естественно Software Value Chain, за счет небольшого дискового пространства.

У JP Boodhoo есть a great series на тему автоматизированных сборок, структуры папок VS и быстрого запуска разработчиков.

0

Спасибо всем, кто ответил. lomaxx, я потратил утро на использование внешней функции, и похоже, что это путь. Я не знал об этом, вероятно, потому, что это не очень заметно в Черепахе.

0

Если вы хотите использовать отслеживание слияния Subversion 1.5 по нескольким проектам одновременно, вы должны использовать одно дерево без внешних.

Отслеженное слияние (как и фиксация) всегда над каталогом и его дочерними элементами.

То же правило применяется к атомным законам. (Работает только в пределах одной рабочей копии.Это может работать в некоторых конкретных случаях, но это поведение не гарантируется)

Смежные вопросы