1

我知道这不是 hg 功能,但也许有人知道获得类似功能的方法。希望我的描述有意义:

我发现将我的主线(即默认分支)提交在补丁队列中保留几周以让它们“解决”很有用。但是,我还希望能够通过新队列创建主题分支。这两个想法是相互排斥的,因为您不能从应用的补丁开始创建新队列。听起来这样做的唯一方法是完成我的主线补丁,并从 qparent 提交开始分支队列,并通过将完成的补丁导入回 mq 来处理调整。还有其他想法吗?git 在这种工作流程上更好吗?

4

3 回答 3

0

mq具有guard可以为您提供所需灵活性的功能,如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),可以在选择后卫时阻止贴片的应用。

要切换到功能 1:

hg qpop -a
hg qselect feature1
hg qpush -a

请注意,如果您在补丁队列中做这么多工作,您应该经常提交队列本身以跟踪您对队列的更改(使用hg com --mq)。

于 2013-06-26T21:24:13.043 回答
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补丁现在已经分支出来,并且不会出现在您的补丁系列中,即使在未应用列表中也是如此。

这是一个可行的解决方案,但需要在测试存储库上进行彻底测试,如果你不小心,它也可能会出错。

于 2013-06-21T09:39:51.390 回答
0

您可能想查看https://www.mercurial-scm.org/wiki/ChangesetEvolution

这个工作流程很可能在 git 中稍微容易一些。

于 2013-06-21T09:22:45.527 回答