Выполнение 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 о значении его содержимого).