如何防止Mercurial补丁被拉?

时间:2012-06-06 16:52:39

标签: version-control mercurial dvcs patch mercurial-queue

到目前为止,我还没有找到一个明确的答案,尽管答案可能是“改变你的工作流程”。

我刚刚开始玩Mercurial的补丁队列,我可以看到它的一些重要力量。这看起来非常棒。在我的测试中,我发现如果你在repo1中有一个补丁队列,而你从repo2拉出来,你可以做一些坏事。例如:

  1. 创建repos 1,然后克隆它。
  2. repo1
  3. 上启用队列
  4. repo1
  5. 上做一些提交和一些修补程序
  6. 将更改提取至repo2
  7. repo1取消申请(弹出?)所有补丁
  8. 将更改提取至repo2
  9. 现在你会看到两个不同的分支 - 从某个角度看是有道理的。但是,由于我的补丁不是repo1历史记录的一部分(至少在它们应用之前),似乎应该有办法告诉mercurial我的补丁是禁止的,并且只有提供“官方历史”中的内容。

    有办法做到这一点吗?

1 个答案:

答案 0 :(得分:8)

Mercurial phases可能就是答案。

从Mercurial v2.1开始,您可以将mq个变更集配置为自动标记为secretsecretincoming/pull命令会忽略outgoing/push个变更集。

要启用此行为,您需要将以下内容添加到配置中:

[mq]
secret = True

启用后,其行为如下:

$ hg qpush --all
applying my-patch
now at: my-patch

$ hg phase -r .
16873: secret

$hg outgoing
comparing with https://www.mercurial-scm.org/repo/hg
searching for changes
no changes found (ignored 1 secret changesets)