Mercurial:从未知的分歧'分支'融合

时间:2012-04-22 01:18:15

标签: version-control mercurial repository

我正在尝试在一个名为NS-3的项目上做一些工作,但我的问题不是项目特定的,所以我想我会问这里以及相关的邮件列表。

基本上,当时的项目代码的副本已经制作完成,并且由该代码组成了一个新的回购。在“分叉”版本和主干上完成了工作。

克隆了分叉的源代码,cd in和hg pull <latest-dev>hg merge,虽然它不是一个完美的合并,但是无法改变的更改都与一个库更改有关,所以很容易固定(理论上)。当然,这种乐观的尝试未能建立起来。

现在我不完全确定从哪里开始,我是DCVS的新手,所以请;针对5岁的想法!

如何找出分叉版本上次与dev-trunk合并的变更集,因为它们是分开但相关的回购?

2 个答案:

答案 0 :(得分:3)

您使用副本而非克隆开始的情况:

如果发生了这种情况:

  1. 项目存在
  2. 制作项目的复制(不是克隆)
  3. hg init在每个单独的副本中运行,创建两个无关的存储库
  4. 工作以两份副本完成
  5. 然后要合并它们,您希望在两个无关的回购中的最新版本中执行此操作:

    1. hg update 0,它将存储库跳回到最早的点 - 它最后看起来与另一个点相同
    2. 其他存储库
    3. 中复制工作目录的内容
    4. hg commit,创建新头
    5. hg merge,它合并了两个头并提供了 base 版本,这有助于合并过程。
    6. 关键是尽可能参与基础修订。 DVCS系统带来的是CVS和SVN没有的表格,每个合并都是两个头和最近共同祖先之间的三向合并。通过在最后一点创建新头来伪造该共同祖先,两个回购看起来相同(副本中的修订版0)模拟基本修订版。

答案 1 :(得分:3)

您使用克隆而不是副本开始的案例

这是典型的DVCS案例,您不应该做太多事情。只需从另一个克隆进入其中一个克隆hg pull并点燃hg merge即可。如果合并需要输入,您将使用hg resolve来提供,并在完成后hg commit

如果此时你的代码没有构建/运行,那么你需要开始调试。使用hg blame查看在无法编译的行附近正在完成的操作,并尝试确定正在完成的工作以及如何处理它。

合并过程 越容易,您就越频繁。每天提取上游更改,而不是每月。

您可以打开GraphLog扩展名并使用hg log -G命令查看两条开发线的分歧点,但最终合并开发,你只需要像任何其他软件缺陷一样处理非构建合并。