0

我最近开始研究一个使用 Mercurial 的开源项目。我是 Mercurial 的新用户,所以我阅读了 HG 的书并开始工作。我的目标是编写代码并始终从上游提取和合并更改,以便我可以保持最新状态。我正在研究的领域也正在被其他人大力开发,所以我确实想在很长一段时间后合并我的更改。我克隆了一个仓库。所以,我的工作流程是这样的:

  1. 我创建了一个书签 mybook

  2. hg up mybook

  3. 编写代码

3.1hg commit -m 'new functions'

  1. hg up default

  2. hg pull

  3. hg update

  4. hg up mybook

  5. hg merge default

  6. 转到第 3 步。

在我看来,这是让我保持最新状态的最简单的工作流程。我也只有一个 HEAD,因为我总是合并。

由于我还不是贡献者,因此不允许我将更改推送到远程仓库。

最近我想向项目负责人展示我的工作,他说给我发一个补丁。这就是我卡住的地方。hg out显示 10 个变更集。第一个出现在一个月前。他们的数字是3341, 3342, 3345, 3346, 3349, 3356, 3360, 3365, 3366, 3368。变更集编号3368是提示。

我最近阅读了有关 MQ 扩展的章节。而这个扩展似乎正是我所需要的。但问题是我编写代码时没有使用 MQ 扩展。

那么,如何在已经创建的变更集上使用 MQ 扩展,以便我可以制作一个补丁发送给项目负责人,以便他可以应用它并查看我的更改?

我刚刚发出hg qinit。下一步是什么?发行hg qimport -r 3341

abort: revision 3341 has unmanaged children

阅读这本书并进一步搜索对我没有帮助。我需要一个建议。

PS 我试过根本不使用 hg 和 MQ:简单diff -urN old/ new/但我想了解如何使用 MQ 来做到这一点。

谢谢你。

4

1 回答 1

2

是的,不要使用MQ。这是一个并行系统,旨在将事物排除在历史之外,更重要的是您不需要它。

您被要求提供“补丁”,而不是您工作的完整历史,因此我建议以单个前后差异的形式发送它。hg export将为您提供一系列差异,用于您所做的所有工作,包括合并。我发现阅读和审查单个差异(在应用之前)要容易得多。但不是 plain diff,使用hg diffwhich 知道只查看跟踪的文件,并具有许多其他不错的功能(包括--git提供更丰富元数据的选项)。这应该这样做:

hg up mybook
hg diff --git -r default > mywork.patch

在发送它之前,执行hg up default并应用补丁以检查它是否可以正常工作而没有冲突。并向收件人提及default您正在修补的版本。

编辑:正如您在评论中看到的那样,@LazyBadger 是由export. 我更喜欢单步补丁,因为我的历史通常是 TMI:没有人关心我添加一个被遗忘的文件的所有时间,或者注意到一个错误太晚并在下一次提交中修复,等等。选择你的。

于 2016-04-29T10:17:53.887 回答