1

我正在尝试学习 Mercurial 队列,但我对既有一堆“hg q*”命令以及许多带有“--mq”参数的普通 hg 命令感到困惑。我认为 --mq 参数是为了替换一些 q* 命令,但我不确定。似乎没有关于(新的?)首选方法的教程或文档。

4

2 回答 2

4

--mq选项会影响所有将存储库作为参数的命令——它实际上将目标存储库更改为$(hg root)/.hg/patches,因此它实际上与运行任何像这样的 mercurial 命令相同:

hg --repository $(hg root)/.hg/patches ....

因此,每个具有选项的命令-R/--repository都有一个 --mq 选项,无需修改即可获得。您之前在 mercurial 中使用过的任何命令:commit、push、pull、summary、id 等都可以使用--mq. 这是相关的python代码:

def mqcommand(orig, ui, repo, *args, **kwargs):
    """Add --mq option to operate on patch repository instead of main"""

    # some commands do not like getting unknown options
    mq = kwargs.pop('mq', None)

    if not mq:
        return orig(ui, repo, *args, **kwargs)

    q = repo.mq
    r = q.qrepo()
    if not r:
        raise util.Abort(_('no queue repository'))
    return orig(r.ui, r, *args, **kwargs)
于 2011-02-11T16:12:29.640 回答
1

--mq标志使不必要的命令已被标记为已弃用,以便它们从hg help mq. 这就是为什么qcommit并且qinit不再出现。

如果您好奇,您仍然hg qcommit可以查看该命令的帮助。

就个人而言,我不喜欢--mq国旗。相反,我使用 shell 别名:

mq='hg -R $(hg root)/.hg/patches'

然后我可以做mq status, mq commit, mq push, 等等。我发现hgmq命令名称之间的区别与我对操作的看法相匹配。请注意,这个简单的别名没有考虑多个队列,因此如果您使用hg qqueue,那么您将不得不对其进行一些扩展。

于 2011-02-21T13:19:33.603 回答