Назад | Перейти на главную страницу

Git - обработчик post-receive с git pull «Не удалось найти действительный каталог git»

Это очень странно, но при настройке репозитория 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', который является важным битом .