@ Ник сказал:
"Это довольно большое упущение, поскольку многие хостинговые сайты предлагают только один репо. С svn я могу эффективно иметь столько репо, сколько захочу, только взяв одну ветку из основного. Подпункты звучат как хак".
Подпункты (или подмодули) не так идеальны, как «узкие клоны», это правда. Но, по крайней мере, для того, чтобы в репозитории одного хостинг-сайта было много разных проектов, в одном репозитории может быть несколько кодовых баз. Это не позволит вам разделять различные разделы одного репозитория / подкаталогов проекта, но позволит вам управлять несколькими проектами. То, что вы делаете, - это множество именованных ветвей, каждая из которых укоренена в пустом (или нулевом) наборе изменений (т. Е. У них нет общей корневой ревизии). Может быть немного грязно, чтобы отслеживать ветви, но это работает.
Например:
hg init
hg branch project-1
# Changes, commits, repeated as needed
hg update null
hg branch project-2
# Changes, commits, repeated as needed
Теперь вы можете видеть все свои проекты:
> hg branches
project-2 5:42c2beffe780
project-1 2:43fd60024328
Проекты не связаны (хотя вы можете объединить их):
> hg debugancestors
-1:000000000000
Наиболее полезно: вы можете клонировать только тот проект, который вам нужен, а остальные не будут смешиваться:
> hg clone <repository> -r project-1
График для этого будет выглядеть примерно так (hg log -qG
):
@ 5 | project-2 | {tip}
|
o 4 | project-2
|
o 3 | project-2
o 2 | project-1
|
o 1 | project-1
|
o 0 | project-1
Вы можете сделать это для любого количества проектов, перечислив каждый из них с помощью hg branches
и прыгнув между ними с помощью hg update
. Это требует некоторой заботы, потому что поддержка именованных веток не идеальна. С одной стороны, это не всегда интуитивно понятно (читайте о hg clone -u
в Mercurial 1.4 - поведение до версии 1.4 удивительно при клонировании). Но это работает .