我知道这不是一个hg功能,但也许有人知道如何获得类似的东西。希望我的描述有意义:
我发现保持主线(即默认分支)在补丁队列中提交几周让它们“解决”是有用的。但是,我也希望能够通过新队列创建主题分支。这两个想法是互斥的,因为您无法从应用的补丁开始创建新队列。听起来这样做的唯一方法是最终确定我的主线补丁,并从qparent提交开始分支队列,并通过将最终补丁导回mq来处理调整。还有其他想法吗? git在这种工作流程中更好吗?
答案 0 :(得分:0)
您可能需要查看https://www.mercurial-scm.org/wiki/ChangesetEvolution。
很有可能这个工作流程在git中稍微容易一些。
答案 1 :(得分:0)
我将以“我没有尝试过,并且不知道它是否会起作用,或者它是否是您想要的”来回答这个问题。
当您为存储库创建MQ时,它会将其创建为当前存储库中的新Mercurial存储库,因此您的内部结构如下所示:
.hg\
cache\
patches\
.hg\
.hgignore
patch1
patch2
series
status
store\
hgrc
...
你可以直接在补丁库上进行操作(事实上,如果你像我一样,你会设置一些脚本来轻松地在那个仓库上工作 - 对我来说,我有mq
命令)。
由于MQ本身就是一个存储库,它可以被提交,拉取,推送等。理论上,这可能包括分支。
可能的工作流程是,每当您认为自己对补丁感到满意时,就会将其提交到补丁回购:
hg qnew Patch3 -m "something"
...
hg qref
mq commit -m "happy with patch3"
请注意,这不是将补丁提交到主存储库,而是简单地存储补丁的历史记录。如果在某些时候你决定要创建一个分支,你可以用:
mq branch SomeBranch
hg qnew Patch4 -m "something else"
...
hg qref
mq commit -m "Committing to the new patch branch"
mq update default
Patch4
补丁现已分支,并且即使在未应用的列表中也不会出现在补丁系列中。
这是一个可行的解决方案,但是需要在测试存储库上进行全面测试,如果你不小心它也可能会出错。
答案 2 :(得分:0)
mq
具有guard
功能,可以为您提供所需的灵活性,如in the hgbook所述。假设您有三个补丁:
patch-a
- 您正在让“解决”的主线补丁patch-b
- 对feature1进行了不完整工作的新补丁patch-c
- 一个新的补丁开始feature2 您只需要在需要时指定一名警卫:
hg qpop -a
hg qguard patch-b +feature1
hg qguard patch-c +feature2
hg qselect feature2
hg qpush -a
此时,mq
将推送所有无人看守的(patch-a
)和受到保护的(patch-c
)补丁,跳过patch-b
,因为它有一个不是目前已选中。始终应用无人看守的补丁。还有一些负面防护装置(例如hg qguard -- -feature1
)可以防止在选择防护装置时应用补丁。
切换到feature1:
hg qpop -a
hg qselect feature1
hg qpush -a
请注意,如果您在修补程序队列中执行了大量工作,则应经常提交队列本身以跟踪队列中的更改(使用hg com --mq
)。