У меня несколько проектов в SVN. Каждый из этих проектов находится в своем собственном стволе и разветвлен для выпусков.
И есть общий код, который используется в каждом проекте. Вопрос в том, как лучше всего обрабатывать код.
Приведу пару сценариев и связанных с ними проблем.
а) Поместите общий код в отдельный транк (или репозиторий) и используйте svn: external.
В случае, если мы разветвим какой-то из проектов, возникнут две проблемы:
- Любая модификация общего кода, сделанная в стволе, будет распространена на ветку, потому что svn: external примет изменения.
- В случае, если нам понадобится в какой-то момент вернуться и собрать именно тот код, который был собран для выпуска, нам будет сложно получить точный код, потому что snv: external снова будет брать последнюю копию общего кода вместо код в тот момент, когда проект был запущен.
Насколько я понимаю, есть одна работа. Как только мы ответим, мы можем изменить svn: external, чтобы получить точную версию общего кода. Однако здесь снова две ловушки:
- Не забывайте делать это каждый раз при ветвлении. (Ненавижу такие вещи, о которых легко забыть).
- Вы не можете изменить общий код, если вам нужно сделать исправление для разветвленного / выпущенного проекта.
б) Другое решение - разветвить общий код, когда проект разветвляется, и изменить внешний, чтобы он указывал на связанную копию общего кода.
- Опять же, одна из проблем - ручной шаг, о котором легко забыть.
- Другая проблема - проблемы слияния. SVN пропустит внешние элементы, когда вы попытаетесь объединить изменения проекта в магистраль. Итак, опять же, разработчик должен не забыть объединить общий код вручную.
Я что-нибудь упускаю? Есть ли какой-нибудь разумный способ справиться с этим?