在Windows上执行Git钩子

我在执行Windows上的Git挂钩时遇到了麻烦。 我有一个裸回购,在“钩子”文件夹我把下面的“更新”和“预推”文件,但PHP脚本永远不会被执行:

"c:/Programs/PHP/php.exe" c:/Data/Scripts/git-pre-push.phpcli %1 

任何想法,为什么PHP脚本不执行?

在Git控制台窗口中,当我尝试将某些内容推送到裸回购时,我看到以下内容:

 POST git-receive-pack (437 bytes) remote: error: hook declined to update refs/heads/master To https://myuser@mydomain/samplerepo ! [remote rejected] master -> master (hook declined) error: failed to push some refs to 'https://myuser@mydomain/samplerepo' 

…所以我知道“更新”以某种方式被执行。 当我删除该文件推送工作得很好。

默认情况下,Git for Windows使用它自己的bash shell的Windows端口来执行钩子脚本。 当然,一个Unix shell不知道%1 。 据推测,Git for Windows有额外的黑客手段来检测“常见的”文件扩展名,例如.bat ,并在这种情况下采取替代路线。

我认为你对自己的程序的修复是最好的,但另一种方法是重写你的脚本来阅读

 #!/bin/sh c:/Programs/PHP/php.exe c:/Data/Scripts/git-pre-push.phpcli "$@" 

(除了暗示下一个编辑脚本的内容的含义之外,shebang行在Windows下没有真正的特殊意义)。