0

我正在尝试运行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 qapplied并且hg qseries什么都不返回)。

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

4

2 回答 2

0

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

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

于 2013-06-04T13:17:59.703 回答
0

原来my/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"
于 2013-06-05T08:24:54.150 回答