Version control 我如何防止Mercurial补丁被拉出?

Version control 我如何防止Mercurial补丁被拉出?,version-control,mercurial,dvcs,patch,mercurial-queue,Version Control,Mercurial,Dvcs,Patch,Mercurial Queue,到目前为止,我还没有找到一个明确的答案,尽管答案可能是“改变你的工作流程” 我刚刚开始玩Mercurial的补丁队列,我可以看到它的强大功能。它看起来非常棒。在我的测试中,我发现如果你在repo1中有一个补丁队列,并且你从repo2中拉出,你可能会做一些不好的事情。例如: 创建repos 1并克隆它 在repo1 在repo1 将更改拉至repo2 在repo1unapply(pop?)上,取消应用所有修补程序 将更改拉至repo2 现在您将看到两个不同的分支-从某种角度来看,这是有意义的。然而

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

我刚刚开始玩Mercurial的补丁队列,我可以看到它的强大功能。它看起来非常棒。在我的测试中,我发现如果你在
repo1
中有一个补丁队列,并且你从
repo2
中拉出,你可能会做一些不好的事情。例如:

  • 创建repos 1并克隆它
  • repo1
  • repo1
  • 将更改拉至
    repo2
  • repo1
    unapply(pop?)上,取消应用所有修补程序
  • 将更改拉至
    repo2
  • 现在您将看到两个不同的分支-从某种角度来看,这是有意义的。然而,由于我的补丁不属于
    repo1
    的历史记录(至少在应用之前是这样),似乎应该有一种方法告诉mercurial我的补丁是禁止使用的,并且只提供“官方历史记录”中的内容

    有办法做到这一点吗?

    Mercurial可能就是答案

    从Mercurial v2.1开始,您可以将
    mq
    变更集配置为自动标记为
    secret
    <代码>秘密变更集被
    传入/拉入
    传出/推入
    命令忽略

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

    [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)
    

    我意识到我可以创建一个独立的存储库,克隆它,并在克隆中使用队列,但这会给我的工作流程增加一点额外的复杂性。此外,让其他人使用修补程序似乎也比较困难。mq修补程序的一个稍微肮脏的秘密是,当它们处于活动状态时,它们是repo历史的一部分(
    qpush
    -ed)。检查日志<代码>qpop从回购历史中删除修补程序。而
    qpush
    -ing再次创建了一个新的,尽管类似的变更集,但具有一个新的id。因此,
    mq
    更改了历史记录。在拉入或推入其他回购之前,可以选择
    qpop-all
    ,也可以尝试
    阶段
    方法。太棒了!事实上,我今天也刚刚了解了阶段,这个解决方案非常有效,谢谢!