2014-11-08 4 views
0

У меня есть два больших проекта X, Y и несколько подпроектов под ними. Я хочу создать проект хранилище структуры что-то вроде этогоСоздание подпроектов большого проекта в SVN

svnroot/ 
     | 
     | 
     Project X -------sub-project Ax (/brunch, /tag, /trunk) 
     |   |--- sub-project Bx (/brunch, /tag, /trunk) 
     |   | 
     |   |--- sub-project Nx (/brunch, /tag, /trunk) 
     |   
     Project Y ------sub-project Ay (/brunch, /tag, /trunk) 
        |--- sub-project By (/brunch, /tag, /trunk) 
        | 
        |--- sub-project Ny (/brunch, /tag, /trunk) 

Я хочу суб-проектов в рамках проекта, которые связаны с развиваться независимо друг от друга. Все подпроекты интегрированы для создания проекта X или Y. Как мне создать эту структуру проекта? Я ищу структуру, чтобы я мог работать над любой иерархией (уровнем проекта и подпроекта).

+0

Я бы не использовал внешние элементы, которые большинство людей путают ими, просты в концепции, но имеют тенденцию быть сложными в исполнении. Его соблазн сделать то, что вы говорите, но я обнаружил, что вам просто нужно соответствовать тому, что SVN хочет от вас. Имейте структуру верхнего уровня (ветвь, теги, соединительная линия) и каждый подпроект под туловищем. Создайте ветвь проекта X и ветвь проекта Y. Существует дублирование да, но его проще иметь дело. Шаг «интеграции», о котором вы говорили, теперь «сливается с багажником» –

ответ

0

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

Однако, если описанная настройка, что вы хотите/нужно сделать, я сделаю следующее:

  1. Создать Project X и Project Y в папки, каждая из которых содержит вложенные папки trunk, branches и subprojects.
  2. Всякий раз, когда вам нужно работать непосредственно с функцией в проекте, создайте ветвь проекта как svn cp path/to/svn/project_x/trunk path/to/svn/project_x/branches/myfeature. Работайте на ветке myfeature до завершения и реинтеграции непосредственно до trunk.
  3. Когда вы начинаете работу над подпроектом, создайте новую пустую папку subproject_ax, а затем создайте подпроектную магистраль как копию основной соединительной линии проекта: svn cp path/to/svn/project_x/trunk path/to/svn/project_x/subproject_ax/trunk.
  4. Если вам нужна ветка для подпроекта, создайте ее из подпроекта, как svn cp path/to/svn/project_x/subproject_ax/trunk path/to/svn/project_x/subproject_ax/branches/mysubfeature. Работать с веткой mysubfeature до конца, а затем реинтегрироваться в подпроект trunk.

Чтобы сохранить всю эту шараду и работает, вы должны регулярно обновлять свои филиалы проекта (в project_x/branches), а также подпроектов стволы (в project_x/subproject_ax/trunk) синхронно с основным trunk, выполнив слияния. То же самое можно сказать и о том, что ветви подпроекта синхронизируются с сундуком подпроекта.

В целом, я надеюсь, что вы увидите свет и либо a) используйте git для этого, либо b) не используйте эту слишком сложную структуру и вместо этого используйте нормальный макет trunk/branches для ваших нужд.

1

Это выглядит как работа для svn:externals!

Устанавливая свойство svn:externals в каталоге, вы можете вытаскивать каталоги из любого места в SVN (даже из разных репозиториев), и они будут отображаться в вашей рабочей копии. Затем вы можете самостоятельно развить эти подкаталоги и вытащить их туда, где они вам нужны.

Пример:

svn_root/ 
│ ProjectX/ 
│ │ branches/ 
│ │ tags/ 
│ │ trunk/ 
│ │ │ ProjectDir1/ 
│ │ │ ProjectDir2/ 
│ │ │ Subprojects/ 
│ │ │ project_file_1.txt 
│ │ │ project_file_2.txt 
│ ProjectY/ 
│ Subprojects/ 
│ │ SubprojectA/ 
│ │ │ branches/ 
│ │ │ tags/ 
│ │ │ trunk/ 
│ │ SubprojectB/ 
│ │ │ branches/ 
│ │ │ tags/ 
│ │ │ trunk/ 
│ │ SubprojectC/ 

Внутри ProjectX и ProjectY, "Подпроекты" пуст. Определить свойство этого каталога с именем «СВН:» внешние ссылки, чтобы тянуть в содержании из подпроектов верхнего уровня каталогов:

^/Subprojects/SubprojectA/[email protected] Ax 
^/Subprojects/SubprojectB/[email protected] Bx 
^/Subprojects/SubprojectC/[email protected] Cx 

Обратите внимание на «@ 123» часть. Это устанавливает конкретную ревизию SubprojectA для втягивания.Без этого спецификатора вы не сможете увидеть, какая версия SubprojectA использовалась для сборки ProjectX в определенной версии. Кроме того, использование этого спецификатора позволяет вам решить, когда вытащить обновления из SubprojectA, когда вы работаете над ProjectX. Вы не хотите разорвать ProjectX за день до релиза, потому что кто-то работает над SubprojectA ради ProjectY!

Вместо указания конкретной ревизии подпроекта на соединительной линии вы также можете указать ветку или метку.

Для получения более подробной информации, обратитесь к книге SVN: http://svnbook.red-bean.com/en/1.7/svn.advanced.externals.html

При разработке подпроекта, вы можете либо работать с верхнего уровня подпроектов каталога, или вы можете временно установить SVN: внешние ссылки, чтобы тянуть в последнем стволу по удаление спецификатора ревизии и полностью работать с рабочей копией ProjectX. Только не делайте commit ваше свойство externals без спецификатора ревизии!

+0

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

0

Я не большой поклонник «встроенных» проектов в одном репозитории SVN. Они создают проблемы

  1. Проверка на один подпроект увеличивает номер пересмотра несвязанных проектов.
  2. Построение подпроекта редко бывает независимым. Обычно вам нужно проверить корневой каталог для сборки.
  3. Искушение достичь одного подпроекта в другой, не фокусируясь на использовании результатов, слишком велико. В конце концов у вас есть некоторые очень плохие взаимодействия источника с источником.

Проекты SVN являются дешевыми. Запустите svnadmin create несколько раз и используйте шаблон, чтобы обеспечить единую схему доступа к паролю.

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