Вызов 'git pull' из git post-update hook

У меня есть центральное git-репо, настроенное с использованием gitolite.

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

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

В каталоге hooks я создал следующие имена сценариев после обновления:

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

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

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

Есть идеи, почему это может происходить?

17
задан Josh Lee 7 February 2011 в 20:27
поделиться

2 ответа

У вас есть возможность провести различные диагностики, как предложено в этом ответе SO.

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

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


См. также запись в блоге Using Git Inside a Git Hook:

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

ENV.delete 'GIT_DIR'

в нашем скрипте на руби, который запускается хуком 'post-receive'.


То же самое в . Git Tip: Auto update working tree via post-receive hook, но с элегантным выходом из положения:

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

#!/bin/sh
cd ..
env -i git reset --hard
27
ответ дан 30 November 2019 в 11:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: