2012-07-24 27 views
23

我得到的錯誤:混帳 - 遠程:錯誤:無法運行鉤/後得到:沒有這樣的文件或目錄

remote: error: cannot run hooks/post-receive: No such file or directory 

當試圖推到遙遠。該receivce後的文件存在於正確的位置(testnew.git /鉤子),包含:使用

#!/bin/bash2 
export GIT_DIR=/var/www/testnew/testnew/.git/ 
export GIT_WORK_TREE=/var/www/testnew/testnew/ 
cd /var/www/testnew/testnew/ 

echo "here we go..." 
git fetch 
git merge origin/master 
git submodule update --init --recursive 

我試過設置權限後得到:

chmod a+x post-receive 

但是這給同錯誤。 將權限設置爲755可以消除錯誤,但腳本不會運行。

+1

直接從shell掛接/ post-receive運行時會發生什麼? 我的猜測是/ bin/bash2不存在,至少它不是一個通常的解釋器,/ bin/bash應該足夠 – jolivier 2012-07-24 12:06:46

回答

27

如果hooks/post-receive文件存在,則會發生這種情況,標記爲可執行文件,但無法執行。它不能執行,因爲解釋器/bin/bash2要麼不存在要麼不可執行。

/bin/bash2替換爲存在且可在服務器上執行的bash名稱。

(錯誤的原因是,操作系統只返回錯誤狀態,「沒有這樣的文件或目錄」,但沒有報告哪個文件不存在,並試圖執行它的代碼不知道系統已經讀取hooks/post-receive並且正在尋找/bin/bash2。它只知道它試圖運行hooks/post-receive,所以這就是它打印的內容)。

+0

這就是問題所在。切換到/斌/ bash工作正常。謝謝。 – BobFlemming 2012-07-24 13:35:13

7

另外(備查文件在這個問題上),如果你在你的shell中運行echo $SHELL你應該看到期望的結果,在這種情況下(根據批准的答案)你所期望的/bin/bash爲您結果。但另一個可能的問題可能是一個看不見的回車

嘗試運行hooks/post-receive如果你仍然有問題,你可能會得到這樣的回答:

-bash: hooks/post-receive: /bin/bash^M: bad interpreter: No such file or directory 

這裏的關鍵是^M證明你實際上得到了意想不到的回車,否則如果它有效,你可能會得到一個懸而未決的迴應。

解決這個問題,它應該解決您的問題。的方式做到這一點,使用dos2unix,例如:

dos2unix .htaccess 
+2

除了這個答案,如果你使用的是Sublime Text,你可以看到 - > Line Endings - > Unix。選擇Unix,然後再次保存該文件。 – kloddant 2016-05-13 18:39:43

+0

添加到此答案中,使用'find ./ -type f -exec dos2unix {} \;'來轉換當前目錄中所有文件的行尾。 – naXa 2016-10-13 09:42:08

0

它是由我忘了做git init第一所致。

相關問題