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

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

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

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

zanona
источник

Ответы:

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 .

Tobu
источник
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
tommasop
источник
0

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

cd /home/smb/websites/testing
git pull
шелк
источник
0

Сценарий, вероятно, вызывается /bin/sh, который не понимает ~. Попробуйте ~вместо этого полный путь .

Даррен Чемберлен
источник
0

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


источник