2011-04-17 361 views
33

我無法使post-recieve和post-commit掛鉤與msysgit正常工作(Windows 7 Pro/32和Ultimate/64)。對於post-commit hook,如果我從git-bash或控制檯提交,我會得到上述錯誤,但如果我通過git-gui提交,它會正常工作。對於接收後的鉤子,所有三者都會給出相同的錯誤。msysgit error with hooks:「git error:can not spawn .git/hooks/post-commit:No such file or directory」

我在想這是某種權限或路徑錯誤,但並不知道從哪裏開始。

回答

62

的家當加入鉤的第一線,像這樣:

#!/bin/sh 
echo "executing post-commit" 
exit 0 

這讓我難住了一段時間,以及和我看到加入家當固定它。在SVN世界中,在* nix中我們有一個「pre-commit」腳本,而在Windows中我們有「pre-commit.bat」,SVN自動在Windows中拾取bat文件。 Git似乎沒有選擇pre-commit.bat(或任何鉤子)並將shebang添加到工作的鉤子文件中。

+1

由此他意味着第一行。我意外地在頂部有一個空的新行,並且得到相同的錯誤。 – jeef3 2011-12-15 23:27:47

+0

只是FYI - 鉤子文件也必須是ASCII編碼,我有一個工具生成一個Unicode格式的鉤子文件,這讓我有同樣的錯誤,因爲我有一些格式化字節之前爆炸。 – mamidon 2015-01-31 01:29:21

+0

也FYI:在我的系統,我有一個perl shebang鉤。但是perl.exe不在路徑中。將它添加到env變量後,錯誤消失了。 – Fildor 2017-05-08 10:01:15

3

如果您有SHEBANG並且仍然失敗,請確保您的路徑環境變量中設置了<path_to_git> \ bin。

如果您通過命令行安裝它,您可能還會有<path_to_git> \ cmd。

2

這是一個古老的問題,但我一直在與這個確切的問題鬥爭,這個問題彈出,所以我認爲值得努力記錄什麼對我有用。

總之:我需要運行Apache作爲常規用戶而不是Local System。這是一個遺留測試​​我正在玩,所以它只運行Windows XP,但似乎至少在該平臺(可能還有其他),msysgit只是在Local System帳戶下運行時無法正常工作(推測是root filesystem未正確映射)。因此,沒有任何shebang行會作爲git-http-backend而無法執行任何msysgit二進制文件(即使使用絕對路徑)。

將Apache切換爲普通用戶帳戶可以完全解決此問題。顯然你需要確保用戶Apache運行時有read/writegit存儲庫的權限,但除此之外,只要確保你的shebang行是#!/bin/sh,並且一切都應該是協同的。

最後,是的,這是一個很大的錘子。理想情況下,您可以在Windows上使用類似suexec的東西,但快速的googling並不表示明顯的路徑。當然,如果有人有任何想法,我會感興趣。

現在,這適用於我,但它似乎並不理想。

+0

我相信問題確實是在您的路徑中有 \ bin。我使用了一個普通的用戶帳戶,並得到了同樣的錯誤。一旦我有路徑中的箱子,我可以運行正常的用戶帳戶或本地系統沒有任何問題。在您的情況下,您可能只在常規用戶帳戶中設置路徑。 – 2012-11-11 04:02:32

+0

我很好奇Apache在哪裏適合所有這些。這不是我的工作流程的一部分,但除此之外,所有的症狀都是匹配的。 Git在我的全局環境PATH('C:\ Program Files(x86)\ Git \ bin'和'.. \ cmd')中。我誤解了什麼嗎? – Barney 2013-09-26 09:54:53

2

如果有人和我一樣運行與通過Apache訪問git倉庫有類似的問題,則應該在Apache配置的路徑,如:

SetEnv PATH "c:/Program Files (x86)/Git/bin;" 
+0

謝謝@Xmister。我們將其添加到httpd.conf中,似乎解決了這個問題。 – tjg184 2013-12-31 14:18:38

4

我使用SourceTree和git LFS和有類似問題:cannot spawn .git/hooks/pre-push

修復方法是刪除pre-push文件(打開它顯示它已嚴重損壞),並重新啓動SourceTree,然後重新生成pre-push文件,一切恢復正常。

相關問題