我正在尝试使用MQ设置我的工作流程,如MqTutorial和HGbook第13章中所述.我努力的部分是如何在版本下有多个补丁队列.
备择方案:
I.为每个队列创建一个单独的存储库.为了使这个可管理标记repos作为.hgsub文件中的子目录
问题:以下结果导致错误:路径包含非法组件
.hg/patches-queue1 = .hg/patches-queue1
Run Code Online (Sandbox Code Playgroud)
II.HGbook第13章描述了您可以在子目录中添加补丁程序
qnew queue1/patch1.diff
Run Code Online (Sandbox Code Playgroud)
问题:所有补丁仍然在同一队列中,必须按顺序应用
还有另一种方法可以将所有补丁队列置于版本控制下并推送吗?一个存储库中有多个HG MQ补丁队列?
我想使用Mercurial捕获对我们使用的软件的vanilla安装所做的更改.每次我们升级软件时,我们都需要手动编辑各种配置文件,并添加我们在当前版本软件中使用的第三方库.为配置文件更改创建补丁很好,但如何将第三方库(二进制文件)添加到Mercurial补丁?它甚至可能吗?
在Mercurial中创建补丁的过程如下:
使用qnew创建补丁 - >进行更改 - >刷新补丁
如果我已经进行了(uncommited)更改并且我想将它们添加到队列中该怎么办?
扩展中的qrefresh命令MQ对我没有意义.我会解释我的假设:
qrefresh在你的补丁队列某补丁,你实际上失去在队列中的下一个补丁的父.因此,如果没有您的干预,下一个补丁可能是无用的..rej文件.不仅仅是因为更好的工具,如果你有原始的未qrefresh修补补丁,你有更多的信息,qrefresh导致你丢失实际需要的信息,以使你对补丁的改变有意义.因此我不明白为什么人们会想要使用这个命令.
更好的选择是,将所有补丁应用hg update到要更改的补丁的父级,然后hg revert将工作目录应用于要更改的补丁.更改此修补程序,将其提交到新修订版,然后重新绑定此新修订版上的所有其他修补程序.
qrefresh当您不编辑单个补丁时,我根本不明白何时相关.似乎这种git方法(将补丁应用于本地分支)比补丁队列更有意义.
我是否正确,我最好使用rebase?我错过了什么吗?
由于没有回复和低视图率而从kiln.se.com迁移
hg mq插件的目的是能够对您的存储库进行完美的提交,而不是混淆您通过代码在您心不在焉的ADHD引起的漫游中所做的更改;
例如....
当我注意到bug y并开始研究bug时,我正在研究bug x.此时,您应该在修补程序队列中创建一个新修补程序,以便在将更改hg qfinish提交到存储库时不要混淆这些更改.
现在假设您忘记制作新补丁并在此过程中hg qrefresh.然后意识到你的错误,你希望将那个补丁的变化分成两个补丁.
我意识到它与编辑队列中的补丁文件(和新的补丁文件)有关,可以将更改分成单独的补丁和以后的提交.但是,我还不熟练编辑diff补丁文件.
我在哪里可以了解到这一点?怎么会这样呢?
我意识到补丁队列有一个非常简单的实现,你可以手动移动东西,但是有一个命令在两个队列之间移动补丁吗?
我必须在mercurial存储库中维护的代码库上运行十几个不同的构建测试.我不想在同一个存储库上连续运行这些测试,因为它们修改了一组公共文件,我想在不同的机器上并行运行它们.此外,在运行所有测试后,我希望能够访问这些测试工作区域的最新测试结果.目前我正在克隆主存储库十几次,并在每个克隆中运行一个不同的测试.在每次测试执行之前,我会执行拉/更新/清除准备序列,以便在最新的清洁状态下开始测试.这对我有好处.
我也正在准备使用mq扩展的新更改,我将在提交之前在所有克隆上进行测试.为了测试一些准备好的候选mq补丁,我想以某种方式部署/同步它们以便在测试克隆中可用,并在运行测试之前使用一些防护应用那些准备好进行测试.
之前有人做过同步吗?最简单的方法是什么?我需要有版本化的mq补丁吗?
我在以下情况下使用mercurial补丁: -
你怎么使用Mercurial Patch Queues?我觉得它是一个非常强大的Mercurial扩展,我并没有充分利用它.
到目前为止,我还没有找到一个明确的答案,尽管答案可能是"改变你的工作流程".
我刚刚开始玩Mercurial的补丁队列,我可以看到它的一些重要力量.这看起来非常棒.在我的测试中,我发现如果你有一个补丁队列repo1,并且你从中拉出来repo2,你可以做一些坏事.例如:
repo1repo1repo2repo1取消应用(弹出?)所有补丁repo2现在你会看到两个不同的分支 - 从某个角度看是有道理的.然而,由于我的补丁不是repo1历史的一部分(至少在它们被应用之前),似乎应该有办法告诉mercurial我的补丁是禁止的,并且只提供"官方历史".
有没有办法做到这一点?
我使用mercurial队列,有时我忘记用a设置我的消息hg qrefresh -m ...而忘记检查我跑之前hg qfinish得到消息patch MyPatch finalized without changeset message.如果没有消息,我有什么方法可以让qfinish中止?
在我这样做之后,我发现解决这个问题的唯一方法是生成一个补丁,hg strip我的最后一个版本,重新应用补丁然后提交我的消息.
我想为mq扩展所做的一些动作设置hg钩子.例如,当我这样做
hg qnew
Run Code Online (Sandbox Code Playgroud)
我想使用post-review在我们的reviewboard服务器中创建一个新的审核请求.如果你这样做,我还想制作一个更新差异的钩子
hg qrefresh
Run Code Online (Sandbox Code Playgroud)
这可能吗?
是否有一种简单的方法可以将最后n次提交导出到新的mq队列中并从真实存储库中删除提交?
我经常开始开发一个新功能,后来意识到我做错了/想要使用MQ来折叠补丁.
我目前在做:
我和远程回购的人合作.我们意识到我所做的更改应该从回购中删除.但是,这些变化存在于许多变化中,并与某人的变化相混合.
在我提交另一个变更集之前,我们决定删除我的更改.所以我用一些未经修改的变化做了补丁qpop.
现在我想从遥控器中退出我的其余更改,并选择性地修改这些更改,让我的同事改变不变.
此外,我希望在一个补丁中使用来自patch_ive_made_before的差异的新补丁中的差异.换句话说 - 我想从2个不同的变更集中选择一个补丁.我必须手动完成吗?
然后,在我这样做之后,我将commit/ push清除更改到存储库中.
Mercurial Queues如何做到这一点?
mercurial ×13
mercurial-queue ×13
patch ×5
dvcs ×2
binary ×1
diff ×1
tortoisehg ×1
workflow ×1