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

#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»:

Снимите флажок quot;Запускать перехваты Gitquot;, это решит вашу проблему

Ответ №9:

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