В моей компании мы используем один репозиторий SVN для хранения нашего кода C ++. База кода состоит из общей части (инфраструктура и приложения) и клиентских проектов (разработанных как плагины).
Схема репозитория выглядит так:
- Инфраструктура
- Приложение1
- Приложение 2
- Приложение 3
- project-for-client-1
- App1-plugin
- App2-плагин
- Конфигурация
- project-for-client-2
- App1-plugin
- App2-плагин
- Конфигурация
Типичный выпуск для клиентского проекта включает данные проекта и каждый проект, который он использует (например, инфраструктуру).
Фактический макет каждого каталога -
- Infrastructure
- branches
- теги
- багажник
- project-for-client-2
- branches
- теги
- багажник
То же самое и с остальными проектами.
У нас есть несколько проблем с макетом выше:
- Трудно начать новую среду разработки для клиентского проекта, так как нужно проверить все задействованные проекты (например: Infrastructure, App1, App2, project-for-client-1).
- Трудно пометить релиз в клиентских проектах по той же причине, что и выше.
- Если в клиентском проекте необходимо изменить какой-то общий код (например, инфраструктуру), мы иногда используем ветку. Трудно отследить, какие ветки используются в проектах.
Есть ли в SVN способ решить что-либо из вышеперечисленного? Я думал об использовании svn: externals в клиентских проектах, но после прочтения this post Я понимаю, что это может быть неправильный выбор.
svn update
на других машинах после замены внешнего на обычную копию (ветвь) указанного кода. Я бы не отказался от внешнего вида только из-за этого крайнего случая. - person Wim Coenen   schedule 10.09.2009