Ошибка msysgit с перехватчиками: «Ошибка git: не удается создать .git / hooks / post-commit: Нет такого файла или каталога» - PullRequest
42 голосов
/ 18 апреля 2011

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

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

Ответы [ 7 ]

77 голосов
/ 18 апреля 2011

Добавьте SHEBANG к первой строке крючка, вот так:

#!/bin/sh
echo "executing post-commit"
exit 0

Это тоже на некоторое время поставило меня в тупик, и я увидел, что добавление шебанга исправило это. В мире SVN, в то время как в * nix у нас есть сценарий «pre-commit», а в Windows у нас был «pre-commit.bat», и SVN автоматически брал файл bat в Windows. Git, похоже, не берет pre-commit.bat (или любой хук) и добавление shebang в файл хука сработало.

6 голосов
/ 14 февраля 2017

Я использую SourceTree и git LFS, и у меня была похожая проблема: cannot spawn .git/hooks/pre-push.

Исправлено было удалить файл pre-push (открыв его, он обнаружил, что он сильно поврежден) и перезапустить SourceTree вв какой момент он восстанавливает файл pre-push и все возвращается в нормальное состояние.

5 голосов
/ 22 февраля 2012

Если у вас есть SHEBANG, но он все еще не работает, убедитесь, что в переменной окружения пути установлено <path_to_git> \ bin.

Возможно, у вас также будет <path_to_git> \ cmd, если вы его установилиработать из командной строки.

3 голосов
/ 28 августа 2012

Это старый вопрос, но я боролся с этой точной проблемой, и этот ТАК вопрос всплыл, поэтому я подумал, что стоит попытаться записать, что сработало для меня.

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

Пока это работает для меня, но не кажется идеальным.

2 голосов
/ 08 мая 2013

Если кто-то, как я, сталкивается с подобной проблемой доступа к репозиториям git через apache, вы должны установить PATH в конфигурации Apache, например:

SetEnv PATH "c:/Program Files (x86)/Git/bin;"
0 голосов
/ 12 января 2019

Для меня удаление строки комментария в начале строки shebang исправило ошибку.Как ни странно, скрипт нормально запускался из оболочки, просто ошибался при запуске в качестве ловушки.

0 голосов
/ 20 июня 2018

Используя tortoisegit и LFS, мне просто нужно было удалить файлы внутри папки .git / hooks.

...