Подтвердить что ты не робот

Mercurial с несколькими проектами

У меня есть несколько проектов с разными циклами релиза, которые находятся в моем репозитории SVN. Релизы создаются с использованием классической структуры тегов в SVN. Когда есть ошибки для исправления в выпусках, ветка создается из тега, ошибка фиксируется, а затем сливается оттуда в магистраль.

Теперь по нескольким причинам я хочу переключиться с SVN на mercurial с центрального сайта push.

Вопрос. Каким образом в Mercurial лучше всего организовать несколько проектов, которые имеют мало кода между ними? Должен ли я создавать несколько сайтов push, по одному для каждого проекта?

Пожалуйста, включите в ответ описание того, как воссоздать мой релиз-тег, ветку bugfix,... с предпочтительной версией дизайна репозитория.

Изменить: я хотел бы установить как можно больше расширений.

Edit2:

Учитывая этот макет SVN:

.
|-- project-a
|   |-- branches
|   |   |-- 1.x
|   |   `-- feature-1
|   |-- tags
|   `-- trunk
`-- project-b
    |-- branches
    |-- tags
    |   |-- 1.0
    |   `-- 1.1
    `-- trunk

(спасибо @bendin!:))

Лучше ли работать с несколькими репозиториями hg push

project_a-trunk
project_a-1.x
project_a-feature-1
project_b-trunk

для ветвей. Теги складываются в соответствующую ветку.

Или вы предпочитаете использовать два push-репозитория в этом примере

project_a
project_b

с именованными ветвями и, следовательно, несколькими головами в пределах одного репо.

Преимущество, которое я вижу в репозиториях с несколькими заголовками, заключается в том, что мне не нужно искать игру в нескольких репозиториях. Недостаток, который я вижу, заключается в том, что книга hg, похоже, препятствует множественным репозиториям. Что бы вы делали?

4b9b3361

Ответ 1

Некоторые репозитории subversion будут группировать логически несвязанные вещи (т.е. проекты с разными номерами версий и циклами выпуска) под одной строкой:

.
|-- branches
|   |-- project-a-1.x
|   `-- project-a-feature-1
|-- tags
|   |-- project-a-1.0
|   |-- project-b-1.0
|   `-- project-b-1.1
`-- trunk
    |-- project-a
    `-- project-b

Этот вид макета не имеет прямого аналога в ртути. Каждый проект, который имеет свой собственный цикл выпуска и собственные номера версий, должен иметь свой собственный репозиторий.

Некоторые репозитории subversion структурированы для этого, предоставляя каждому проекту свои собственные соединительные линии, теги и ветки:

.
|-- project-a
|   |-- branches
|   |   |-- 1.x
|   |   `-- feature-1
|   |-- tags
|   `-- trunk
`-- project-b
    |-- branches
    |-- tags
    |   |-- 1.0
    |   `-- 1.1
    `-- trunk

Вы можете думать о каждом проекте как о логическом репозитории в вашем репозитории физического подрывника. Каждый проект имеет свой собственный багажник, теги и ветки. Это также имеет то преимущество, что вы можете сохранить названия тегов и ветвей короче, потому что вы уже знаете, к какому проекту они принадлежат.

Этот макет также тривиально выражать с помощью инструмента, такого как mercurial. Каждый "проект" становится ртутным хранилищем. Теги и ветки в этом репозитории являются тегами и ветвями этого проекта.

Ответ 2

Как говорит Бендин, вы должны создать несколько репозиториев, по одному для каждого независимого проекта, в качестве старта.

Mercurial commits создаются на уровне репозитория, и вы не можете проверить только один подкаталог. Это не похоже на Subversion, что позволяет совершать непротиворечивые коммиты, комментируя только некоторые файлы, но затем также позволяет вам проверять только один подкаталог.

Когда вы делаете выпуск, вы обычно добавляете тег в свой репозиторий Mercurial (hg tag). Вы можете свободно решить, хотите ли вы хранить репозиторий bugfix для каждой версии, если вы хотите создать их при необходимости в первый раз. Фокус в том, что

% hg clone -r 1.0 project-a project-a-1.0.x

можно использовать для создания репозитория project-a-1.0.x, который имеет историю только с тегом 1.0. Затем вы можете исправить ошибку в project-a-1.0.x и вернуть ее обратно в project-a. Дополнительные исправления могут быть сделаны в репозитории project-a-1.0.x.