Mercurial с несколькими проектами - PullRequest
32 голосов
/ 30 мая 2009

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

Теперь по нескольким причинам я хочу перейти с SVN на Mercurial с центральным push-сайтом.

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

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

Редактировать: Я хотел бы установить как можно меньше расширений.

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, по-видимому, препятствует множественному репо. Что бы вы делали?

Ответы [ 3 ]

12 голосов
/ 30 мая 2009

В некоторых хранилищах 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

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

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

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

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

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

8 голосов
/ 30 мая 2009

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

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

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

% 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.

2 голосов
/ 30 мая 2009

Я думаю, что вы хотите попробовать расширение ртутного леса

...