12

好的,所以我们最近从 SVN 转换为 Mercurial。
我们正常使用 TortoiseHG。

在我们的一个存储库中,我们拥有所有项目,C++ / .NET / ASP。我们有大约 100 个项目,都使用通用库项目。

因此,为每个项目创建多个 repo 将是一项非常艰巨的任务。

现在,我们有了default分支,假设branchA.
我正在处理BranchA并向它添加我的超级更改,并且我更改了一个公共库,比如说一个扩展方法

我想将其提交给branchAand default,我将如何处理?

但是,我不希望我的所有更改branchA都合并到default中,也不希望所有其他更改从default

希望这是足够的信息!

4

5 回答 5

23

只是为了保持更新:有一个在 Mercurial 中实现樱桃采摘的嫁接命令。

此命令使用 Mercurial 的合并逻辑从其他分支复制单个更改,而不合并历史图中的分支。这有时被称为“反向移植”或“樱桃采摘”。默认情况下,graft 将从源变更集中复制用户、日期和描述。

于 2012-06-23T12:22:33.230 回答
11

有一种方法可以避免这个问题。您可以在来自某个基线修订版的单独功能分支上进行所有更改,通常是最后一个版本的标签或其他一些稳定点S

这样,您的更改X将位于其自己的分支上,该分支可以与其他分支(合并M1M2)合并,而不会引入不需要的变更集:

-----S--o----o---M1----o---> default
     |          /
     |---------X   feature or bugfix
     |          \
     \--o---o----M2----o-----> BranchA 

这只需要正常hg merge操作;无需补丁、移植MQ

于 2011-01-15T13:39:45.030 回答
5

如果您将公共代码分离到自己的存储库中,则可以使用子存储库将其包含在每个项目中。

顺便说一句,我建议每个项目都有一个单独的存储库,特别是如果有这么多的话。

于 2010-04-08T09:55:08.713 回答
3

想要的不是合并,而是挑选。您可以使用 https://www.mercurial-scm.org/wiki/TransplantExtension,但要注意那里提到的并发症。

于 2010-04-07T22:12:11.220 回答
-1

您正在描述“樱桃采摘”或进行“部分合并”,这是目前 Mercurial 无法实现的。你有几个选择:

  • 将您的公共代码分离到它自己的存储库中。
  • 生成您对公共代码所做更改的差异,并将其应用于default分支。
于 2010-04-07T21:51:45.960 回答