git post-receive работает неправильно

У меня следующая проблема. Я обновил «post-receive» до cd в определенный каталог, а затем вытащил репо, чтобы развернуть его следующим образом:

#!/bin/bash
cd /var/www/site
git pull origin master

Однако всякий раз, когда я делаю «git push origin master» на своей локальной машине, я получаю следующее:

Counting objects: 5, done.
Delta compression using up to 2  threads.
(etc..)
remote: fatal: Not a git repository: '.'

Тем не менее, когда я вручную cd на /var/www/site и делаю git pull origin master, он работает блестяще.


person andy    schedule 28.03.2012    source источник


Ответы (2)


Используйте unset GIT_DIR следующим образом

#!/bin/bash
cd /var/www/site || exit
unset GIT_DIR
git pull origin master
exec git-update-server-info

Дополнительную информацию о GIT_DIR можно найти здесь. Git любит окружающую среду

person Hasintha Janka    schedule 28.03.2012
comment
Блестяще, как раз то, что мне было нужно. Не могли бы вы объяснить, почему это необходимо сделать? - person andy; 28.03.2012
comment
GIT_DIR — это одна из нескольких переменных среды, которые вы можете установить для различных команд git. В хуке после получения $GIT_DIR всегда (?) устанавливается на .. Если вы cd в другом месте, git pull по-прежнему видит, что $GIT_DIR установлено на ., и ожидает найти репозиторий в ., но вы переехали, а его там нет. Его очистка заставляет git вернуться к своему обычному поведению (смотря в ./.git, в том месте, где вы cd-ed). - person torek; 29.03.2012
comment
Нельзя ли просто установить GIT_DIR в каталог, в который выполняется cded? Кажется излишним сбрасывать GIT_DIR, а затем отдельно cd в рабочий каталог, если это то, для чего был разработан GIT_DIR. Есть ли причина, по которой это не делается? - person Hashim Aziz; 12.09.2019

Другой вариант: вы можете указать рабочий каталог и каталог git в команде.

git --work-tree=/home/user/repos/my_app --git-dir=/home/user/repos/my_app/.git <command>

e.g:

git --work-tree=/home/user/repos/my_app --git-dir=/home/user/repos/my_app/.git status
person Rukmal Dias    schedule 24.08.2013