Git - ловушка после получения с помощью git pull «Не удалось найти правильный каталог git»


17

Это очень странно, но когда вы устанавливаете 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

работает без проблем ...

любая помощь по этому вопросу будет в значительной степени оценена

большое спасибо

Ответы:


25

Пока хук запущен, GIT_DIRи (если рабочее дерево было определено явно) GIT_WORK_TREEустановлены. Это означает, что ваш пул не будет работать со вторым хранилищем в каталоге, на который вы изменили.

Попробуй git --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull; или сбросьте локальную среду репозитория git с помощью этого:

unset $(git rev-parse --local-env-vars)

Больше информации об этих переменных окружения в man 1 git .


1
Большое спасибо за это, Тобу, он действительно работает, я тоже проверю больше информации об этом. Ура
занона

6

Одна вещь, которую я испытал, заключалась в том, что использование 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


1

Разве это не работает?

cd /home/smb/websites/testing
env -i git pull

Edited

Еще лучше

cd /home/smb/websites/testing
unset GIT_DIR
git pull

0

Вы пробовали с полным путем вместо ~?

cd /home/smb/websites/testing
git pull


0

Первый рекомендуемый ответ правильный - когда работает ловушка, GIT_DIR и т. Д. Установлены. Однако, если вы хотите использовать сценарий в другом хранилище, этот метод имеет недостатки, так как он жестко кодирует сброс GIT_DIR. Как они и подразумевали, другой способ - удалить переменную с помощью env следующим образом: env -i git reset --hard Очевидно, какая команда, которую вы запускаете, зависит от вас - это всего лишь бит 'env -i', который является важным битом ,

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.