【问题标题】:hg aborts on outgoing mq hookhg 在传出 mq 钩子上中止
【发布时间】:2013-06-04 08:42:00
【问题描述】:

我正在尝试运行hg pull -u,但它给出了以下错误:

searching for changes
/bin/sh: !: not found
abort: preoutgoing.mq-no-push hook exited with status 1

我的 .hgrc 包含这个钩子,我猜这是导致问题的原因:

preoutgoing.mq-no-push = ! hg qtop > /dev/null 2>&1

hg incoming 为我提供了我所期望的更改列表,并且本地或远程存储库中没有 mq 补丁(hg qappliedhg qseries 不返回任何内容)。

简单的解决方法是注释掉我的 .hgrc 文件的这一部分。然后我可以拉,但是在合并时我发现我的存储库中有多个头,这是导致错误的原因吗?如果是这样,更准确的错误消息可能会很好。如果没有,有没有人有更好的解决方法?

【问题讨论】:

    标签: mercurial mercurial-queue hgrc


    【解决方案1】:

    错误信息是准确的。问题是mq-no-push 钩子以状态1 退出。Mercuial 不知道钩子的用途,因此除了返回码之外它无法告诉您任何信息。由钩子本身提供一个有意义的信息来说明为什么你不能推送。

    如果您查看 abort 行之前的输出,您会发现问题在于您的 shell /bin/sh 找不到命令 !,这意味着钩子实际上没有工作,这让我相信钩子的格式不正确。我对 Linux/Unix/MacOSX shell 的了解不够,不知道解决方案是什么。我查看了mq extension 页面,您的配置与给出的示例相同,所以我想知道您的 shell 中是否存在错误设置。

    【讨论】:

    • 我也想知道。 /bin/sh 是一个指向 /sbin/sh 的链接,我认为这还可以,但现在我仔细观察它原来是 jsh,并以不同的方式定义 !。感谢您让我走上正轨,请参阅下面的答案以了解实际解决方法
    【解决方案2】:

    原来我的/bin/sh是jsh,它对!的定义不同。为了解决这个问题,我将 .hgrc 文件中的命令更改为显式调用 bash,如下所示:

    prechangegroup.mq-no-pull = bash -c "! hg qtop > /dev/null 2>&1"
    preoutgoing.mq-no-push = bash -c "! hg qtop > /dev/null 2>&1"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多