2013-06-04 29 views
0

我試圖運行hg pull -u,但它提供了以下錯誤:汞中止傳出MQ鉤

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讓我改變的列表,我希望並且有在本地或遠程倉庫(hg qappliedhg qseries任何回報)沒有MQ補丁。

簡單的解決方法是註釋掉我的.hgrc文件的這一部分。然後,我可以拉,但在合併時,我發現我的存儲庫中有多個頭,是什麼原因導致了錯誤?如果是這樣,更準確的錯誤信息可能會很好。如果沒有,是否有人有更好的解決方法?

回答

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" 
0

錯誤消息是準確的。問題是mq-no-push掛鉤退出狀態爲1.Mercuial不知道鉤子是什麼,所以它不能告訴你任何東西,除了它的返回碼。爲了提供一個有意義的信息,你可以不去推動它,這取決於鉤子本身。

如果你看一下中止前行的輸出,你可以看到,問題是,你的shell /bin/sh找不到命令!這意味着勾手不實際工作,使我相信,勾手不格式正確。我對Linux/Unix/MacOSX shell知之甚少,不知道解決方案是什麼。我查看了mq extension頁面,並且您擁有的配置與給出的示例相同,因此我想知道是否在shell中有不正確的設置。

+0

我想知道的是藏漢。 '/ bin/sh'是'/ sbin/sh'的鏈接,我認爲它可以,但現在我更仔細地看到它是jsh,並定義了'!'。感謝您將我放在正確的軌道上,請參閱下面的答案以瞭解實際的解決方法 – craq