В принципе, у меня есть сервер с репозиторием git origin. Я пытаюсь сделать еще одно автоматическое извлечение репо из источника каждый раз, когда кто-то нажимает на него код. Я использовал крючки в origin, особенно post-receive. Пока что мой пост получил примерно так:
#!/bin/sh
GIT_DIR=/home/<user>/<test_repo>
git pull origin master
Но когда я нажимаю на источник с другого компьютера, я получаю сообщение об ошибке:
remote: fatal: Not a git repository: '/home/<user>/<test_repo>'
Однако test_repo определенно является репозиторием git. Я могу войти в него и запустить «git pull origin master», и он отлично работает.
Есть ли более простой способ сделать то, что я пытаюсь сделать? Если нет, что я делаю не так с этим подходом? Заранее спасибо.
Отредактируйте, чтобы уточнить: репо - это веб-сайт в разработке, и я хотел бы, чтобы его версия всегда была доступна в полном объеме.
Когда вы устанавливаете переменную среды, она доступна только в этой оболочке, поэтому при запуске другой программы, такой как git, локальные переменные не передаются. Допустим, у нас есть test.sh
:
#!/usr/bin/bash
echo "GIT_DIR=$GIT_DIR"
Теперь давайте посмотрим на следующие примеры
$ GIT_DIR=LOOK_MY_GIT_DIR_IS_SET
$ ./test.sh
GIT_DIR=
Это потому, что переменная среды не получила экспортируется к запущенной программе.
$ export GIT_DIR=LOOK_MY_GIT_DIR_IS_SET
$ ./test.sh
GIT_DIR=LOOK_MY_GIT_DIR_IS_SET
В примере ScottZ установка переменной среды при запуске программы приводит к тому, что она экспортируется ТОЛЬКО для этой команды.
$ GIT_DIR=LOOK_MY_GIT_DIR_IS_SET ./test.sh
GIT_DIR=LOOK_MY_GIT_DIR_IS_SET
Надеюсь это поможет!
Я использую похожую ловушку, но GIT_DIR должен указывать на подкаталог .git.
#!/bin/sh
cd /home/<user>/<test_repo>
GIT_DIR=.git git pull origin master
Вы уверены, что правильно устанавливаете GIT_DIR?
Я предполагаю, что вы используете репо, отличное от голого, в этом случае ваш GIT_DIR должен быть
GIT_DIR=/home/user/test_repo/.git
Чтобы проверить это, запустите в командной строке следующее:
GIT_DIR=/home/user/test_repo/.git git status