好的,我们最近从SVN转换为Mercurial
我们通常使用TortoiseHG。
在我们的一个存储库中,我们拥有所有项目,C ++ / .NET / ASP。我们有大约100个项目,都使用共同的图书馆项目
因此,为每个项目创建多个repo将是非常困难的任务。
现在,我们有default
分支,让我们说branchA
。
我正在处理BranchA
并添加我的超级更改,我更改了一个公共库,让我们说一个扩展方法
我想将其提交给branchA
和default
,我该怎么做?
但是,我不希望branchA
的所有更改都合并到default
,我也不希望default
的所有其他更改< / p>
希望这是足够的信息!
答案 0 :(得分:23)
只是为了让事情稍微更新一下:graft command在Mercurial中实现了挑选。
此命令使用Mercurial的合并逻辑来复制单个更改 来自其他分支,而不在历史图表中合并分支。 这有时被称为“backporting”或“cherry-picking”。通过 默认情况下,移植将从源复制用户,日期和说明 的变更。
答案 1 :(得分:11)
有一种方法可以避免这个问题。您可以make all your changes on separate feature branches from some baseline revision,通常是最后一个版本的标记或其他一些稳定点S
。
这样,您的更改X
将位于其自己的分支上,该分支可以与其他分支合并(合并M1
和M2
),而不会引入不需要的更改集:
-----S--o----o---M1----o---> default
| /
|---------X feature or bugfix
| \
\--o---o----M2----o-----> BranchA
这只需要正常的hg merge
操作;无需补丁,Transplant或MQ。
答案 2 :(得分:5)
如果将公共代码分隔到自己的存储库中,则可以使用子对象将其包含在每个项目中。
顺便说一句,我 建议为每个项目都有一个单独的存储库,特别是如果有这么多的话。
答案 3 :(得分:3)
想要的不是合并,而是樱桃挑选。您可以使用https://www.mercurial-scm.org/wiki/TransplantExtension,但要注意那里提到的并发症。
答案 4 :(得分:-1)
您正在描述“采摘樱桃”或进行“部分合并”,目前Mercurial无法做到这一点。您有几个选择:
default
分支。