#windows #git #msysgit
#Windows #git #msysgit
Вопрос:
У меня возникли проблемы с корректной работой перехватчиков post-recieve и post-commit с msysgit (Windows 7 Pro / 32 и Ultimate / 64). Для перехвата после фиксации я получаю вышеупомянутую ошибку, если я совершаю коммит либо из git-bash, либо из консоли, но она отлично работает, если я совершаю коммит через git-gui. Для перехвата после получения все три выдают одинаковую ошибку.
Я думаю, что это какая-то ошибка разрешения или пути, но на самом деле не имею ни малейшего представления, с чего здесь начать.
Ответ №1:
Добавьте SHEBANG в первую строку перехвата, вот так:
#!/bin/sh
echo "executing post-commit"
exit 0
Это тоже на некоторое время поставило меня в тупик, и я увидел, что добавление shebang исправило это. В мире SVN, в то время как в * nix у нас есть скрипт «предварительной фиксации», а в Windows у нас был «pre-commit.bat», и SVN автоматически получил файл bat в Windows. Git, похоже, не распознает предварительную фиксацию.bat (или любой другой перехват), и добавление shebang в файл перехвата сработало.
Комментарии:
1. И под этим он имеет в виду самую первую строку. У меня случайно была пустая новая строка вверху, и я получал ту же ошибку.
2. Просто К вашему сведению — файл привязки также должен быть закодирован в ASCII, у меня был инструмент, генерирующий файл привязки в формате Unicode, который выдавал мне ту же ошибку, поскольку у меня было несколько байтов форматирования до взрыва.
3. Также к вашему сведению: в моей системе у меня был перехват с ошибкой perl. Но perl.exe не было в пути. После добавления его в переменную env ошибка исчезла.
Ответ №2:
Я использую SourceTree и git LFS и столкнулся с аналогичной проблемой: cannot spawn .git/hooks/pre-push
.
Исправление заключалось в удалении pre-push
файла (при его открытии выяснилось, что он сильно поврежден) и перезапуске SourceTree, после чего он восстанавливает pre-push
файл, и все возвращается к нормальной жизни.
Комментарии:
1. Большое вам спасибо. У меня было отключение питания, и для меня был поврежден
post-checkout
файл.
Ответ №3:
Если у вас есть ошибка, и она по-прежнему завершается сбоем, убедитесь, что в вашей переменной окружения path установлен <path_to_git>
bin.
У вас, вероятно, также будет <path_to_git>
cmd, если вы установили его для работы из командной строки.
Ответ №4:
Это старый вопрос, но я боролся именно с этой проблемой, и появился этот вопрос SO, поэтому я подумал, что стоит приложить усилия, чтобы записать то, что сработало для меня.
Короче говоря: мне нужно было запустить Apache
как обычного пользователя вместо Local System
. Это было в устаревшем тесте, с которым VM
я играл, поэтому он был запущен только Windows XP
, но похоже, что, по крайней мере, на этой платформе (и, возможно, на других), msysgit
просто не работает должным образом при запуске под Local System
учетной записью (предположительно, root filesystem
не отображается должным образом). В результате ни одна строка shebang не будет работать, поскольку git-http-backend просто не может выполнить какие-либо двоичные файлы msysgit (даже с абсолютными Windows
путями).
Переключение Apache на запуск от имени обычной учетной записи пользователя полностью устранило эту проблему. Очевидно, вам нужно убедиться, что у пользователя Apache, запущенного as, есть разрешения на read
/ write
git
репозитории, но помимо этого, просто убедитесь, что ваша shebang
строка является #!/bin/sh
, и все должно быть в порядке.
Наконец, да, это большой молоток. В идеале вы могли бы использовать что-то вроде suexec
on Windows
, но быстрое googling
не указывает очевидный путь вперед, там. Конечно, если у кого-нибудь есть какие-либо идеи, мне было бы интересно.
На данный момент это работает для меня, но не кажется идеальным.
Комментарии:
1. Я полагаю, что проблема действительно в том, чтобы иметь <path_to_git>bin в вашем path. Я использовал обычную учетную запись пользователя и получил ту же ошибку. Как только у меня появится bin в path, я смогу работать от имени обычной учетной записи пользователя или локальной системы без каких-либо проблем. В вашем случае, возможно, вы указали путь только в своей учетной записи обычного пользователя.
2. Мне любопытно, где Apache вписывается во все это. Это не является частью моего рабочего процесса, но в остальном все симптомы совпадают. Git есть в моем пути к глобальной среде (
C:Program Files (x86)Gitbin
и..cmd
). Я что-то недопонимаю?
Ответ №5:
Получил это в репозитории с использованием LFS, избавился от него с помощью git lfs update --force
Ответ №6:
Если кто-то, как я, столкнется с подобной проблемой с доступом к репозиториям git через apache, вы должны указать ПУТЬ в конфигурации Apache, например:
SetEnv PATH "c:/Program Files (x86)/Git/bin;"
Комментарии:
1. Спасибо @Xmister. Мы добавили это в httpd.conf, и это, похоже, решило проблему.
Ответ №7:
Используя tortoisegit и LFS, мне просто пришлось удалить файлы внутри папки .git / hooks.
Ответ №8:
Если вы используете Android studio, вы можете удалить эту ошибку, сняв флажок «Запускать перехваты Git»:
Ответ №9:
Для меня удаление строки комментария перед строкой shebang исправило ошибку. Как ни странно, скрипт нормально запускался из командной строки, просто ошибка при запуске в качестве перехвата.