Git - удаленный: ошибка: не удается запустить hooks/post-receive: нет такого файла или каталога
Я получаю сообщение об ошибке:
remote: error: cannot run hooks/post-receive: No such file or directory
При попытке нажать на удаленный. Файл после приема находится в правильном месте (testnew.git/hooks) и содержит:
#!/bin/bash2
export GIT_DIR=/var/www/testnew/testnew/.git/
export GIT_WORK_TREE=/var/www/testnew/testnew/
cd /var/www/testnew/testnew/
echo "here we go..."
git fetch
git merge origin/master
git submodule update --init --recursive
Я пробовал устанавливать разрешения для post-receive, используя:
chmod a+x post-receive
Но это дает ту же ошибку.
Установка разрешения на 755 удаляет ошибку, но script не запускается.
Ответы
Ответ 1
Это произойдет, если файл hooks/post-receive
существует, помечен как исполняемый, но не может быть выполнен. Он не может быть выполнен, потому что интерпретатор /bin/bash2
либо не существует, либо не является исполняемым.
Замените /bin/bash2
именем bash, который существует и является исполняемым на сервере.
(Причина, по которой эта ошибка выглядит так: операционная система возвращает статус ошибки "Нет такого файла или каталога", но не сообщает, какой файл не существует. И код, который пытался его выполнить, не знаю, что система уже читала hooks/post-receive
и искала /bin/bash2
. Все, что она знает, это попытка запустить hooks/post-receive
, чтобы она печаталась).
Ответ 2
Кроме того (для будущей справки и документации по этому вопросу), если вы должны запустить echo $SHELL
в своей оболочке, вы должны увидеть ожидаемый результат, в этом случае (на основе одобренного ответа) вы ожидаете /bin/bash
как ваш результат. Но другой возможной проблемой может быть невидимый возврат каретки.
Попробуйте запустить hooks/post-receive
, если у вас все еще есть проблемы, вы можете получить ответ вроде этого:
-bash: hooks/post-receive: /bin/bash^M: bad interpreter: No such file or directory
Ключевым моментом является ^M
, который является доказательством того, что вы действительно получаете неожиданный возврат каретки, иначе, если бы он сработал, вы, вероятно, получите зависающий ответ.
Исправьте это, и он должен исправить вашу проблему. Чтобы сделать это, используйте dos2unix
, например:
dos2unix .htaccess
Ответ 3
Это было вызвано тем, что я забыл сначала сделать git init
.