32

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

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

问题:在 mercurial 中,组织多个项目之间共享少量代码的最佳方式是什么?我应该为每个项目创建多个推送站点吗?

请在答案中包含有关如何使用您首选的存储库设计版本重新创建我的发布标签、错误修复分支的描述。

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

编辑2:

鉴于此 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

具有命名的分支,因此在一个 repo 中有多个头。

我看到的多头存储库的优势是我不必在多个存储库中寻找标签。我看到的缺点是 hg 书似乎不鼓励多头回购。你会/做什么?

4

3 回答 3

12

一些颠覆存储库会将逻辑上不相关的东西(即具有不同版本号和发布周期的项目)分组到一个主干下:

.
|-- 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 中没有直接的模拟。每个有自己的发布周期和自己的版本号的项目都应该有自己的存储库。

一些颠覆存储库的结构是通过为每个项目提供自己的主干、标签和分支来做到这一点:

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

您可以将每个项目视为物理 subversion 存储库中的一个逻辑存储库。每个项目都有自己的主干、标签和分支。这还有一个好处是您可以缩短标签和分支名称,因为您已经知道它们属于哪个项目。

这种布局也很容易用像 mercurial 这样的工具来表达。每个“项目”都成为一个反复无常的存储库。该存储库中的标签和分支是该项目的标签和分支。

于 2009-05-30T10:59:57.393 回答
8

正如bendin 所说,您应该创建多个存储库,每个独立项目一个存储库作为开始。

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

当您发布一个版本时,您通常会向 Mercurial 存储库 ( hg tag) 添加一个标签。您可以自由决定是否要为每个版本保留一个错误修复存储库,或者是否要在第一次需要时创建它们。诀窍是

% hg 克隆 -r 1.0 项目-a 项目-a-1.0.x

可用于创建project-a-1.0.x仅包含标签的历史记录的存储库1.0。然后,您可以修复错误project-a-1.0.x并将其推回project-a. 可以在project-a-1.0.x存储库中进行进一步的错误修复。

于 2009-05-30T15:19:42.580 回答
2

我认为您想尝试mercurial 森林扩展

于 2009-05-30T10:49:48.647 回答