Проблема использования Git в качестве инструмента развертывания по веткам
Я пытаюсь создать скрипт пост-обновления и использовать git в качестве инструмента развертывания на удаленном сервере.
Мой скрипт после обновления выглядит примерно так
git update-server-info
for ref in $@;do
echo $ref
if [ "$ref" = "refs/heads/production" ]
then
ssh git@myProductionServer.com GIT_WORK_TREE=/home/www/test git checkout -f production
fi
done
Однако, когда я запускаю это, возвращается ошибка, которая говорит:
Not a git repository (or any of the parent directories): .git
Что не имеет никакого смысла, потому что я могу запускать команды git из каталога через ssh.
Есть ли что-то еще, что мне нужно сделать в моем скрипте после обновления?
Решение
Я добавил GIT_DIR
переменная, так что теперь моя команда выглядит так:
ssh git@myProductionServer.com GIT_DIR=/home/www/test/.git GIT_WORK_TREE=/home/www/test git checkout -f production
1 ответ
Вам также необходимо установить GIT_DIR
переменная окружения - попробуйте следующее:
ssh git@myProductionServer.com GIT_WORK_TREE=/home/www/test GIT_DIR=/home/www/test/.git git checkout -f production
Правила о GIT_DIR
а также GIT_WORK_TREE
(и их эквиваленты, --git-dir=<>
а также --work-tree=<>
) настолько противоречивы для меня, что теперь я устанавливаю правило, что, если я устанавливаю один из них, я должен установить оба, и, кроме того, убедиться, что они оба настроены на абсолютные пути.