Я думаю, у вас есть несколько вариантов.Первый - использовать один модуль с ветвями, как предлагает Мартин.У вас будет ветка для каждого активного проекта или для потока разработки.Изменения в совместно используемом коде будут обнаружены при слиянии обратно в транк.
например,
Module
|
+ trunk
| + Project1
| + Project2
| + Shared
|
+ branches
|
+ Project1Development
| + Project1 [active development here]
| + Project2
| + Shared [active development here]
|
+ Project2Development
+ Project1
+ Project2 [active development here]
+ Shared [active development here]
Во-вторых, вы можете разветвлять Shared, чтобы вам не нужно было прикреплять к нему внешнее.Это то, что вы будете иметь в своем хранилище
Project1
|
+ trunk [svn:external to a branch of Shared]
Project2
|
+ trunk [svn:external to a branch of Shared]
Shared
|
+ trunk
|
+ branches
|
+ Project1Development
|
+ Project2Development
Каждый проект будет использовать свой собственный вид транка.Опасность здесь в том, что ветки становятся слишком длинными - вам нужно будет дисциплинировать их слияние и удаление, возможно, после каждого выпуска.Ветви Shared должны создаваться только тогда, когда требуются специфичные для проекта изменения в shared.
В-третьих, вы продолжаете использовать внешние функции, как и сейчас, и стараетесь закрепить ревизии.Если бы вы это делали, я бы перестроил ваш репо так, чтобы он был похож на второй рисунок выше - то, что у вас есть с внешними элементами в проекте, немного пахнет.