Это довольно интересно, я только что быстро прочитал на части дизайна, из того, что я могу собрать, эффективно разветвляя файлы по отдельности в произвольную структуру, вы попадете в мир боли, когда вы начинаете объединять вещи обратно в их исходное местоположение (и объединение, вероятно, не будет выполнено за один раз для всех файлов).
Но я думаю, что вы можете сделать то же самое, чтобы спроектировать детали в Subversion с небольшой настройкой:
Во-первых, часть проекта может быть смоделирована с использованием внешних элементов (1.6 позволяет внешним элементам указывать как на файлы, так и на каталоги).
Для этого вы можете настроить иерархию проекта следующим образом:
/project1
/trunk
/doc
/design1
/release2
/src
/subproject1
/subproject2
/tags
/branches
/parts
/part1
/part2
/part3
Каждая папка частей будет содержать только свойство "svn: externals", которое вводит соответствующие файлы для этой части в соответствующее подраздел, например:
svn:externals
../../trunk/src/subproject1 src/subproject1
../../trunk/doc/release2 doc/release2
Затем вы извлекаете деталь, а не транк, и получаете рабочую копию, содержащую только те файлы, которые вы хотите в структуре, которую определяет деталь, и когда вы фиксируете, вы идете прямо в транк - объединение не требуется здесь.
Вы также можете создать базовые детали для своих частей, сначала разветвив весь ствол (дешево и быстро), а затем изменив внешние элементы своей части, чтобы они указывали на ответвление вместо основного ствола. Это не увеличивает размер репозитория, и ваша рабочая копия сохраняет точно такую же структуру, вы просто получаете все свои файлы из ветви, а не из ствола. Любые обновления в этой части также идут вразрез с веткой - объединение изменений этой части - это просто стандартное объединение стандартной реинтеграции ветви обратно в транк, что является стандартной практикой SVN.
Управление определением деталей становится более интересным, поскольку в приведенной выше схеме каждая часть определяется вручную, и они не являются иерархическими. Вам понадобится какая-то форма скрипта (возможно, make-файл), которая знает иерархию частей и получает имя части, может создавать соответствующие определения внешних элементов, которые затем могут быть применены к каталогу частей.
Так что, хотя subversion не предоставляет явного уровня абстракции частей, он может быть довольно точно смоделирован вручную - вы ограничены только возможностями svn: externals и сценариями, которые вы используете для управления ими.