Это очень странно, но при настройке репозитория git и создании хука после получения с помощью:
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--
Итак, я спрашиваю себя, как можно заставить хуку обновлять клон с помощью пост-получения?
в этом случае пользователь, запускающий процессы, тот же, и все внутри папки пользователя, поэтому я действительно не понимаю ... потому что, если я перейду вручную в
cd ~/websites/testing
git pull
работает без проблем ...
любая помощь по этому поводу будет очень признательна
большое спасибо
Пока крючок запущен, GIT_DIR
и (если рабочее дерево было определено явно) GIT_WORK_TREE
установлены. Это означает, что ваш запрос не будет работать со вторым репозиторием в каталоге, в который вы перешли.
Пытаться git --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull
; или отключите локальную среду репо git следующим образом:
unset $(git rev-parse --local-env-vars)
Подробнее об этих переменных среды в человек 1 мерзавец.
Одна вещь, которую я испытал, заключалась в том, что использование post-update
hook '--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
Это не работает?
cd /home/smb/websites/testing
env -i git pull
Отредактировано
Еще лучше
cd /home/smb/websites/testing
unset GIT_DIR
git pull
Вы пробовали использовать полный путь вместо ~?
cd /home/smb/websites/testing
git pull
Сценарий, вероятно, вызывается с /bin/sh
, который не понимает ~
. Попробуйте с полным путем к ~
вместо.
Первый рекомендуемый ответ правильный - когда ловушка выполняется, GIT_DIR и т. Д. Установлены. Однако, если вы хотите иметь возможность использовать скрипт в другом репозитории, этот метод ошибочен, поскольку он жестко кодирует сброс GIT_DIR. Как они подразумевали, другой способ - удалить переменную с помощью env следующим образом: env -i git reset --hard Очевидно, какую команду вы запускаете, зависит от вас - это просто бит 'env -i', который является важным битом .