我正在尝试运行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文件的这一部分。然后我可以拉,但在合并时我发现我的存储库中有多个头,是什么导致错误?如果是这样,更准确的错误消息可能会很好。如果没有,是否有人有更好的解决方法?
答案 0 :(得分:0)
错误消息准确无误。问题是mq-no-push
挂钩退出状态为1. Mercuial不知道挂钩是什么,所以除了返回代码之外它不能告诉你任何东西。由钩子本身提供一个有意义的消息,告诉你为什么不能推动它。
如果你看一下中止行之前的输出,你会发现问题是你的shell /bin/sh
找不到命令!
,这意味着钩子实际上并没有工作并使我相信钩子格式不正确。我对Linux / Unix / MacOSX shell知之甚少,不知道解决方案是什么。我查看了mq extension页面,你所拥有的配置与给出的示例相同,所以我想知道你的shell中是否有错误的设置。
答案 1 :(得分:0)
事实证明,我的/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"