Ответ 1
Существует несколько структурных различий между репозиторией Subversion (SVN) и Mercurial (HG) или короткой репо, подразумевает, как вы будете "проектировать" вашу иерархию:
- Mercurial лучше работает только с одним проектом в репозитории. Поскольку вам всегда нужно клонировать весь репозиторий, наличие нескольких проектов в одном репозитории может иметь большое влияние на время клонирования, а также на операции pushing/pulling, так как вам придется синхронизировать все задания, которые выполнялись в других проектах, чем ваши каждый раз.
- SVN не имеет "сильного" понятия тегирования/ветвления, в то время как Mercurial делает. В SVN (на момент написания) каждая ветвь, каждый тег, в основном является копией данный проект/папка/что угодно. Рекомендуемая структура
trunk
/branches
/tags
должна помочь вам найти ваши "копии", не более того. С другой стороны, ветки и метки хорошо определены в меркуриале. Тег - это действительно имя, которое вы наделите определенной ревизией, и вы можете запросить все существующие теги. Для веток вы увидите, что MANY способы обрабатывать их, но тот, который лучше всего подходит для философии SVN, называются ветвями.
Имея это в виду и связывая это с вами идеей стабильного, обеспечения качества (QA) и процесса разработки (dev), вот что я бы рекомендовал:
- Один репозиторий под названием "Стабильный" для каждого проекта. Несколько репозиториев "QA" за проект и тонны "Dev" для каждого проекта.
- Разделы тегов и имен определяются только "стабильным" репо, или, в конечном итоге, "QA" . Репозитории "Dev" могут обрабатывать их по-разному, не причиняя вреда.
- Вы никогда не делаете толчок к "QA" или "Стабильному" репо, они тянут или объединяют пакеты или патчи, и там один ответственный за каждого.
Пример: MyProject-1.0
[STABLE Repository, pulls from any/all QA]
- MyProject-1.0
[QA Repositories, branched from STABLE, pulls from any/all DEV ]
- QA_MyProject-001 (Person A)
- QA_MyProject-002 (Person B)
- QA_MyProject-003 (Person C)
...
- QA_MyProject-### (Person #)
[DEV Repositories, branched from STABLE or QA]
- DEV_MyProject-001 (Feature X)
- DEV_MyProject-002 (Feature Y)
- DEV_MyProject-003 (Feature Z)
...
- DEV_MyProject-### (Feature #)
1. DEV completes feature(s)
2. QA pulls feature(s) from DEV
3. STABLE pulls from all approved QA(s) (consolidating all changes)