Version control 我如何防止Mercurial补丁被拉出?
到目前为止,我还没有找到一个明确的答案,尽管答案可能是“改变你的工作流程” 我刚刚开始玩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 现在您将看到两个不同的分支-从某种角度来看,这是有意义的。然而
repo1
中有一个补丁队列,并且你从repo2
中拉出,你可能会做一些不好的事情。例如:
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
,也可以尝试阶段
方法。太棒了!事实上,我今天也刚刚了解了阶段,这个解决方案非常有效,谢谢!