Поскольку все проекты имеют независимую версию, пометка каждого проекта в отдельности обеспечит вам максимальную гибкость.
Если вас беспокоит усилие, необходимое для тегирования всех этих проектов, вы можете легко сделать это с помощью клиента командной строки svn
svn cp <branch> <tag> -m"tagging release v.1"
Вложение, как вы показали в своем вопросе, приведет к неразрешимому беспорядку.
Пример
Предположим, что ваш репозиторий расположен на http://mysvn/
и имеет следующую структуру:
/rep
/trunk
/project1
/project2
/shared_project
/tags
/branches
Если вы хотите пометить проекты из транка, вы можете запустить следующие команды из командной строки.
svn cp "http://mysvn/trunk/project1" "http://mysvn/tags/project1 v.1" -m"tagging release v.1"
svn cp "http://mysvn/trunk/project2" "http://mysvn/tags/project2 v.1" -m"tagging release v.1"
svn cp "http://mysvn/trunk/shared_project" "http://mysvn/tags/shared_project v.1" -m"tagging release v.1"
Результатом является следующий макет хранилища
/rep
/trunk
/project1
/project2
/shared_project
/tags
/project1 v.1
/project2 v.1
/shared_project v.1
/branches
Другой подход предполагает, что ваш репозиторий имеет следующую компоновку:
/rep
/project1
/trunk
/tags
/branches
/project2
/trunk
/tags
/branches
/shared_project
/trunk
/tags
/branches
В этом случае вы будете помечать следующие команды:
svn cp "http://mysvn/project1/trunk/" "http://mysvn/project1/tags/v.1" -m"tagging release v.1"
svn cp "http://mysvn/project2/trunk/" "http://mysvn/project2/tags/v.1" -m"tagging release v.1"
svn cp "http://mysvn/shared_project/trunk/" "http://mysvn/shared_project/tags/v.1" -m"tagging release v.1"
Это переведет ваш репозиторий в следующее состояние:
/rep
/project1
/trunk
/tags
/v.1
/branches
/project2
/trunk
/tags
/v.1
/branches
/shared_project
/trunk
/tags
/v.1
/branches
Лично я предпочитаю первый подход, так как он держит папки под тегами на том же уровне, что и в транке, и вы не получите кучу папок с именем "v.1". В конце концов, это вопрос предпочтений.