Экспериментально кажется, что git hooks запускаются с текущим каталогом, установленным в качестве корня репозитория. Однако я не вижу никаких гарантий в документации git. Должен ли я полагаться на текущий рабочий каталог, чтобы найти репозиторий git, или есть лучший способ обработать репозиторий git, связанный с крюком?
В git hook находится текущий рабочий каталог, который, как гарантируется, находится в репозитории git?
Ответ 1
Он основан на значении, установленном для переменной окружения GIT_DIR
. Он установлен в корень репозитория, когда крюк начинает работать. Многие перехватчики, особенно те, которые делают попытку из другого репо, не задают (и reset) эту переменную среды по мере необходимости.
Ответ 2
Текущие ответы, похоже, устарели. Начиная с 2.9.0, документы указывают следующее:
Прежде чем Git вызывает крючок, он изменяет свою рабочую директорию на корень рабочего дерева в не-голом репозитории или $GIT_DIR в открытом репозитории.
Ответ 3
Вы можете использовать переменную окружения $GIT_DIR
. $GIT_DIR
указывает на каталог .git
.