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

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 не запускается.

4b9b3361

Ответ 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.