0

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

基本上,制作了当时当前项目代码的副本,并用该代码制作了一个新的 repo。在“分叉”版本和主干上都完成了工作。

所以克隆了分叉的源, cd in 和hg pull <latest-dev>, hg merge,虽然它不是一个完美的合并,但不可合并的更改都与一个库更改有关,因此很容易修复(理论上)。自然,这种乐观的尝试未能建立。

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

我如何找出分叉版本的哪个变更集最后与 dev-trunk 合并,因为它们是独立但相关的存储库?

4

2 回答 2

3

您从副本而不是克隆开始的情况:

如果发生这种情况:

  1. 项目存在
  2. 制作项目的副本(不是克隆)
  3. hg init在每个单独的副本中运行,创建两个不相关的存储库
  4. 工作在两个副本中完成

然后要合并它们,您希望在两个不相关的存储库中的最新执行此操作:

  1. hg update 0,它将存储库跳回到它的最早点——它最后一次看起来与另一个相同的点
  2. 从另一个存储库复制工作目录的内容
  3. hg commit,这会创建一个新的头部
  4. hg merge,它合并了两个头,还提供了一个基础修订,这有助于合并过程。

如果可能,关键是要进行基本修订。DVCS 系统带来的 CVS 和 SVN 所没有的是每次合并都是两个头和最近的共同祖先之间的 3 路合并。通过在两个 repos 看起来相同(副本中的修订版 0)的最后一点创建新头来伪造该共同祖先,从而模拟基本修订版。

于 2012-04-22T02:29:49.570 回答
3

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

这是经典的 DVCS 案例,您不需要做太多事情。只需从另一个克隆进入其中一个hg pull并关闭hg merge. 如果合并需要输入,您将使用hg resolve它来提供它,并且当您完成时hg commit

如果此时您的代码没有构建/运行,那么您只需开始调试。用于hg blame查看无法编译的行附近正在执行的操作,并尝试了解正在执行的操作以及如何处理它。

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

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

于 2012-04-22T02:36:55.737 回答