如何在Mercurial中合并两个项目?


84

我有两个单独的Mercury存储库。在这一点上,它们“成为一体”是有道理的,因为我想同时从事两个项目。

我真的希望两个项目都成为新存储库中的子目录。

  1. 如何合并两个项目?
  2. 这是个好主意,还是应该将它们分开?

看来我应该能够从一个存储库推送到另一个存储库……也许这真的很简单?

Answers:


69

我能够以这种方式合并我的两个存储库:

  1. 使用hg clone first_repository该库的克隆之一。
  2. 用于hg pull -f other_repository从其他存储库中提取代码。

-f拉上的(force)标志是关键-它表示忽略两个存储库不是来自同一来源的事实。

这是此功能的文档


1
这是否也保留了第二个存储库中提交内容的哈希键?(我猜不是,但是在您进行合并之前可能没问题。)
Macke,

6
这行得通,但是您还需要运行hg merge以使一切正常运行
Factor Mystic

7
@Marcus Lindblom:提取变更集永远不会改变其哈希值。如果看完hg glog之后,您会发现您有两行不相关的变更集。每行的第一个变更集没有父级,但这对Mercurial来说不是问题。拉动后,您需要为每行进行一个新的更改集hg mv,然后将所有内容都放入相应的子文件夹中,然后合并这些行,并进行了设置。
史蒂夫·洛斯

1
如果这两个存储库都具有两个通用的代码,该怎么办。合并会自动处理吗?至于合并,我们可以说$ hg merge吗?
kamal

2
仅供参考,以下是此过程的文档mercurial.selenic.com/wiki/MergingUnrelatedRepositories
Gent 2012年


3

如果您在整个项目中使用的不是相同的代码,请将它们分开。你可以设置你的每一个这些项目的个人资源库只是一个分开的目录。为什么不必混合所有分支,合并和提交注释。

关于您的编辑:从一个存储库推送到另一个存储库。您可以随时使用transplant命令。虽然,所有这些实际上都在阻碍您将两者结合的愿望,所以使用我的建议可能会让您感到不舒服。然后,您可以使用森林扩展名或其他名称。

hg transplant -s REPOSITORY lower_rev:high_rev
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.