具有多个项目的Mercurial

我有几个不同的发布周期的项目位于我的SVN仓库中。 发布是通过在SVN中使用经典标签结构创建的。 当发布版本中存在缺陷时,通过标签创建一个分支,这个缺陷被修复,然后从那里合并到主干中。

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

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

请在回答中包含关于如何使用您的首选版本的存储库设计来重新创建我的发布标签,错误修复分支的说明。

编辑:我想安装尽可能小的扩展名。

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本书似乎不鼓励多头回购。 你会做什么?


一些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这样的工具来表达这种布局也很简单。 每个“项目”成为一个储存库。 该存储库中的标签和分支是该项目的标签和分支。


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

Mercurial提交是一个存储库范围的级别,您不能仅签出一个子目录。 这与Subversion不同,它允许您通过仅提交一些文件来进行不一致的提交,但它也允许您仅签出一个子目录。

当你发布一个版本时,你通常会为你的Mercurial仓库( hg tag )添加一个标签。 您可以自由决定是否要为每个发行版保留一个bug修复库,以及是否希望在第一次需要时创建它们。 诀窍是

% 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 。 进一步的错误修正可以在project-a-1.0.x版本库中进行。


我认为你想尝试mercurial forest extension

链接地址: http://www.djcxy.com/p/6399.html

上一篇: Mercurial with multiple projects

下一篇: Are subversion externals an antipattern?