2016-03-06 4 views
3

В моих крючках после приема я хочу запустить этот простой крючок, который на самом деле всего две строки, если вы вынимаете эхо, а что нет.Git не распознает репозитории при выполнении крюка

Я проверял правильность команд ssh (ing) на сервер и двойную проверку путей.

Однако я получаю эту ошибку:

remote: fatal: Not a git repository: '.'

Что делает ". и почему он не работает. Если я набираю эту команду вручную, на сервере они работают нормально.

Но на крючке их нет.

после приема крючок

#!/bin/sh 

echo "****" 
echo "*****" 
echo "start:post-receive" 
echo "*****" 
echo "****" 

cd /home/user_name/public_html 
git pull /home/user_name/root.git master 

echo "****" 
echo "*****" 
echo "end:post-receive" 
echo "*****" 
echo "****" 
+2

Если вы попытаетесь запустить команды 'git' в вашем' post-receive', вам, вероятно, потребуется отключить переменную среды 'GIT_DIR'. Попробуйте это и посмотрите, что произойдет. – larsks

+0

Можете ли вы рассказать мне, для чего это использовалось? Я запускал 'set' из оболочки и не видел его в списке. –

ответ

0

I ran set from the shell and did not see it listed

Это потому, что он установлен во время выполнения самого крючка.
Посмотрите, что скажет echo $GIT_DIR в этом скрипте.

Поступая «unset GIT_DIR», вы заставите мерзавец искать каталог мерзавца, где вы только что изменили папку: в /home/user_name/public_html (который должен иметь .git вложенный)

Я также предлагаю использовать --git-dir и --work-tree варианты в любой команде git в hook. Таким образом, нет ничего удивительного. См. Например, «Deploy website using Git/Gitolite (post-receive hook doesn't work properly)»

Смежные вопросы