Mercurial有多个项目

时间:2009-05-30 10:35:06

标签: version-control mercurial dvcs repository-design

我的SVN存储库中有几个具有不同发布周期的项目。通过使用SVN中的经典标记结构创建版本。当在版本中存在要修复的错误时,会从标记创建分支,修复该错误,然后将其合并到主干中。

现在,出于多种原因,我想通过中央推送网站从SVN切换到mercurial。

问题:在mercurial中组合多个项目的最佳方式是哪种方式在它们之间共享很少的代码?我应该创建多个推送站点,每个项目一个吗?

请在答案中包含有关如何使用您首选的存储库设计版本重新创建我的release-tag,bugfix分支的说明。

编辑:我想安装尽可能少的扩展程序。

EDIT2:

鉴于此SVN布局:

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

(谢谢@bendin!:))

使用多个hg推送存储库是否更好

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

分支机构。标签被折叠到适当的分支中。

或者您更愿意在此示例中使用两个推送存储库

project_a
project_b

使用命名分支,因此在一个回购中有多个头。

我看到多头回购的好处是我不必去寻找多个回购中的标签。我看到的缺点是,hg书似乎不鼓励多头回购。你会做什么/做什么?

3 个答案:

答案 0 :(得分:12)

一些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这样的工具来表达这种布局也是微不足道的。每个“项目”都成为一个多变的存储库。该存储库中的标记和分支是该项目的标记和分支。

答案 1 :(得分:8)

与bendin说的一样,你应该创建多个存储库,每个独立项目一个作为开始。

Mercurial提交是一个存储库范围的级别,您不能只签出一个子目录。这与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 :(得分:2)

我认为你想尝试mercurial forest extension