Это очень странно, но когда вы устанавливаете git-репозиторий и создаете ловушку post-receive с помощью:
echo "--initializing hook--"
cd ~/websites/testing
echo "--prepare update--"
git pull
echo "--update completed--"
хук действительно работает, но ему никогда не удается правильно запустить git pull:
6bfa32c..71c3d2a master -> master
--initializing hook--
--prepare update--
fatal: Not a git repository: '.'
Failed to find a valid git directory.
--update completed--
поэтому сейчас я спрашиваю себя, как можно заставить хук обновить клон с помощью post-receive?
в этом случае пользователь, выполняющий процессы, один и тот же, и все внутри пользовательской папки, так что я действительно не понимаю ... потому что, если я зайду в
cd ~/websites/testing
git pull
работает без проблем ...
любая помощь по этому вопросу будет в значительной степени оценена
большое спасибо
Одна вещь, которую я испытал, заключалась в том, что использование
post-update
хука '--git-dir' работало замечательно, но git все еще жаловался на отсутствующее рабочее дерево (несмотря на использование '--work-tree')Короче говоря, это не сработало:
git --git-dir /path/to/websites/testing/.git --work-tree /path/to/websites/testing pull
тогда как это сработало:
cd /path/to/websites/testing
git --git-dir /path/to/websites/testing/.git pull
источник
Разве это не работает?
Edited
Еще лучше
источник
Вы пробовали с полным путем вместо ~?
источник
Сценарий, вероятно, вызывается
/bin/sh
, который не понимает~
. Попробуйте~
вместо этого полный путь .источник
Первый рекомендуемый ответ правильный - когда работает ловушка, GIT_DIR и т. Д. Установлены. Однако, если вы хотите использовать сценарий в другом хранилище, этот метод имеет недостатки, так как он жестко кодирует сброс GIT_DIR. Как они и подразумевали, другой способ - удалить переменную с помощью env следующим образом: env -i git reset --hard Очевидно, какая команда, которую вы запускаете, зависит от вас - это всего лишь бит 'env -i', который является важным битом ,
источник