Вызов 'git pull' из git исправления после обновления

У меня есть центральный репозиторий git, созданный с использованием гитолита.

Я хочу настроить крючок таким образом, чтобы всякий раз, когда пользователь нажимает на репо, он выполняет поиск в другом месте, за которым следует некоторое автоматическое тестирование.

Пока я только хочу, чтобы он выполнял тягу.

В каталоге hooks я создал следующие script имена post-update:

#!/bin/sh  
cd /home/git/www/epicac
git pull

Когда я вызываю этот script, используя. /post -update, он делает именно то, что я хочу.

Однако всякий раз, когда он автоматически запускается при подключении, я получаю: fatal: не репозиторий git:..

Любая идея, почему это может происходить?

Ответ 1

В этом SO-ответе есть различные диагностические функции.

В частности, проверьте значение GIT_DIR и GIT_WORK_TREE.

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


См. также сообщение в блоге Использование Git Внутри Git Hook:

В конце концов, мы получили нашего гуру linux, и он заметил, что среда, в которой работает пользователь Git, полностью отличается от того, что находится внутри крюка.
Гитолит делает кучу вещей в env, но тот, который нас задирал, был настройкой GIT_DIR.
После того, как мы это выяснили, решение было таким же простым, как:

ENV.delete 'GIT_DIR'

в нашем ruby ​​ script, который запускается с помощью крюка <<27 > .


То же самое дело в Git Совет. Автоматическое обновление рабочего дерева с помощью post-receive hook, но с элегантным выходом из этого:

Решение?
Оказывается, крюк post-receive запускается с переменной окружения GIT_DIR, установленной в папку repo/.git, поэтому независимо от того, какой путь вам "cd" в нее будет всегда запускать любые последующие команды Git есть.
Фиксирование это просто вопрос отмены настройки GIT_DIR
(спасибо Ульриху Петри за элегантное env -i решение):

#!/bin/sh
cd ..
env -i git reset --hard

Ответ 2

Как насчет указания --git-dir.

#!/bin/sh
cd /home/git/www/epicac
git --git-dir=.git pull

Ответ 4

Это должно сделать трюк только в одной строке:

git -C /home/git/www/epicac pull