Проблема использования 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=<>) настолько противоречивы для меня, что теперь я устанавливаю правило, что, если я устанавливаю один из них, я должен установить оба, и, кроме того, убедиться, что они оба настроены на абсолютные пути.

Другие вопросы по тегам