Подтвердить что ты не робот

Msysgit error with hooks: "git ошибка: не может появляться .git/hooks/post-commit: нет такого файла или каталога"

У меня возникли проблемы с обработкой post-receive и post-commit, чтобы корректно работать с msysgit (Windows 7 Pro/32 и Ultimate/64). Для перехвата после совершения транзакции я получаю указанную выше ошибку, если я фиксирую ее из git - bash или консоли, но она отлично работает, если я передаю через git -gui. Для пост-приемного крючка все три дают ту же ошибку.

Я думаю, что это какая-то ошибка разрешения или пути, но на самом деле нет никакой подсказки, с чего начать.

4b9b3361

Ответ 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 исправило ошибку. Как ни странно, скрипт нормально запускался из оболочки, просто выдавал ошибку при запуске в качестве хука.