Msysgit error with hooks: "git ошибка: не может появляться .git/hooks/post-commit: нет такого файла или каталога"
У меня возникли проблемы с обработкой post-receive и post-commit, чтобы корректно работать с msysgit (Windows 7 Pro/32 и Ultimate/64). Для перехвата после совершения транзакции я получаю указанную выше ошибку, если я фиксирую ее из git - bash или консоли, но она отлично работает, если я передаю через git -gui. Для пост-приемного крючка все три дают ту же ошибку.
Я думаю, что это какая-то ошибка разрешения или пути, но на самом деле нет никакой подсказки, с чего начать.
Ответы
Ответ 1
Добавьте SHEBANG в первую строку hook, например:
#!/bin/sh
echo "executing post-commit"
exit 0
Это тоже заставило меня задуматься, и я увидел, что добавление shebang исправило это. В мире SVN, в то время как в * nix у нас есть "pre-commit" script, а в Windows у нас был "pre-commit.bat", и SVN автоматически взял файл bat в Windows. Git, похоже, не забирает pre-commit.bat(или любой крючок) и добавляет shebang в обработанный файл hook.
Ответ 2
Если у вас есть SHEBANG, и он все еще не работает, убедитесь, что в переменной окружения пути есть <path_to_git>
\bin.
Возможно, у вас также будет <path_to_git>
\cmd, если вы установили его для работы из командной строки.
Ответ 3
Я использую SourceTree и git LFS и имел аналогичную проблему: cannot spawn .git/hooks/pre-push
.
Исправить было удаление файла pre-push
(открытие его показало, что он сильно поврежден) и перезапустить SourceTree, после чего он восстанавливает файл pre-push
, и все возвращается в норму.
Ответ 4
Это старый вопрос, но я боролся с этой точной проблемой, и этот вопрос возник, и я подумал, что стоит записать, что сработало для меня.
Короче: мне нужно было запустить Apache
в качестве обычного пользователя вместо Local System
. Это было в предыдущем тесте VM
, с которым я играл, поэтому он выполнял только Windows XP
, но кажется, что по крайней мере на этой платформе (и, возможно, в других), msysgit
просто не работает должным образом при запуске учетная запись Local System
(предположительно, root filesystem
неправильно отображается). В результате ни одна строка shebang не будет работать, поскольку git -http-backend просто не может выполнять никакие двоичные файлы msysgit (даже с абсолютными Windows
путями).
Переключение Apache для работы в качестве обычной учетной записи пользователя полностью устраняет эту проблему. Очевидно, вам нужно убедиться, что пользователь Apache запущен, так как имеет разрешения на read
/write
репозитории git
, но помимо этого просто убедитесь, что ваша строка shebang
#!/bin/sh
, и все должно быть коаксичным.
Наконец, да, это большой молот. В идеале вы сможете использовать что-то вроде suexec
на Windows
, но быстрый googling
не указывает на очевидный путь вперед. Конечно, если у кого-то есть какие-то идеи, мне было бы интересно.
Пока это работает для меня, но это не кажется идеальным.
Ответ 5
Если кто-то, подобно мне, сталкивается с аналогичной проблемой при доступе к репозиториям git через apache, вы должны установить PATH в конфигурации Apache, например:
SetEnv PATH "c:/Program Files (x86)/Git/bin;"
Ответ 6
Используя tortoisegit и LFS, мне просто нужно было удалить файлы из папки .git/hooks.
Ответ 7
Для меня удаление строки комментария в начале строки shebang исправило ошибку. Как ни странно, скрипт нормально запускался из оболочки, просто выдавал ошибку при запуске в качестве хука.