Выполнение Git перехватов в Windows

У меня возникли проблемы с выполнением Git перехватов в Windows. У меня есть голое репо, и в нем "перехватывает" папку я помещаю следующее в файлы "обновление" и "предварительный толчок", но PHP скрипт никогда не выполняется:

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

Любые идеи относительно того, почему PHP script не выполняется?

В окне консоли Git я вижу следующее, когда я пытаюсь подтолкнуть что-то к голой репо:

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

... поэтому я знаю, что "обновление" каким-то образом выполняется. Когда я удаляю этот файл, push работает очень хорошо.

Ответ 1

По умолчанию Git для Windows выполняет скрипты hook, используя собственный порт Windows оболочки bash. Разумеется, оболочка Unix не имеет понятия о %1. Предположительно, Git для Windows есть дополнительные хаки для обнаружения "общих" расширений файлов и— например .bat — и возьмите альтернативный маршрут в таком случае.

Я думаю, что ваше исправление в вашей собственной программе является лучшим, но другой подход заключается в том, чтобы переписать ваш script для чтения

#!/bin/sh
c:/Programs/PHP/php.exe c:/Data/Scripts/git-pre-push.phpcli "[email protected]"

(строка shebang не имеет особого смысла под Windows, кроме того, что намекает, что следующий человек отредактирует script о значении его содержимого).