@尼克说:
“这是一个很大的遗漏,因为很多托管站点只提供一个 repo。使用 svn,我可以有效地拥有尽可能多的 repo,只需从主分支中获取一个分支。subrepos 听起来像一个 hack。”
Subrepos(又名子模块)并不像“狭义克隆”那么理想。但至少对于在一个托管站点的存储库中有许多不同的项目,您可以在一个存储库中拥有多个代码库。这不允许您分割一个存储库的不同部分/项目的子目录,但它将让您管理多个项目。您所做的是有许多命名分支,每个分支都植根于空(或空)变更集(即它们没有共同的根修订版)。跟踪分支可能会有点混乱,但它确实有效。
例如:
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 在它们之间跳转。这需要一些注意,因为命名分支支持并不完美。一方面它并不总是直观的(阅读 Mercurial 1.4 中的 hg clone -u —— 克隆时 1.4 之前的行为令人惊讶)。但它确实有效。