Как вы структурируете репо, вероятно, будет зависеть от цикла выпуска. Когда вы создадите новую версию своего общего ядра, вы разовьете ее сразу всем своим клиентам? Или вы будете выполнять постепенное развертывание, поскольку каждому клиенту нужны новые функции (и, следовательно, им нужны новые функции в ядре)?
Если вы обновляете свое ядро для всех, то вам, вероятно, понадобится один набор веток / тегов / ствола:
branches/
tags/
trunk/
core/
customer1/
project1/
project2/
customer2/
project1/
project2/
Недостатком этого является то, что, если для каждого клиента есть много кода, ваши заказы будут огромными, и вам придется проверять все, чтобы иметь возможность что-либо делать (хотя SVN 1.6 дает вам возможность проверить подмножество дерева).
С другой стороны, если разные клиенты будут выпущены по разным графикам, то вы можете предпочесть иметь каталог верхнего уровня для каждого клиента. Вы также хотели бы, чтобы где-нибудь сохранилось ваше общее ядро.
core/
branches/
tags/
trunk/
customer1/
branches/
tags/
trunk/
Если вы сделаете это, вам, вероятно, захочется заглянуть в svn:external
, чтобы вы получали копию общего ядра всякий раз, когда проверяли исходное дерево customer1. Это вызывает некоторые проблемы, когда вы хотите разветвить или пометить, хотя. (Что может быть причиной для предпочтения первого варианта.)
Если вы еще этого не сделали, прочитайте « Прагматический контроль версий с использованием Subversion ». У них есть несколько примеров использования внешних устройств, которые могут помочь уточнить, какую схему вы хотите использовать.