Получить "fatal: not git repository: '.'" при использовании перехвата пост-обновления для выполнения 'git pull' в другом репо
Я новичок в Git, поэтому я прошу прощения (и, пожалуйста, поправьте меня), если я здесь неправильно использую терминологию, но я сделаю все возможное.
Я пытаюсь настроить чистое git-репо (хаб) и рабочую копию сайта разработки (премьер) на веб-сервере. Я пытался сделать это после этой статьи. Я хочу, чтобы рабочая копия разработки обновлялась всякий раз, когда на репозиторий-концентратор выдвигаются. У меня сложилось впечатление, что правильный крючок для этого post-update
, который я создал так:
#!/bin/sh
whoami
cd /path/to/working-copy/
RET=`git pull`
echo $RET
Обновить
Когда я помещаю изменения из локального репо в пустой концентратор, я получаю следующий вывод из скрипта после обновления:
remote: sites
remote: fatal: Not a git repository: '.'
Однако, если я подключаюсь к серверу как пользовательские сайты и выполняю этот скрипт вручную, он прекрасно работает. Есть идеи, что может быть не так с этим хуком или скриптом?
5 ответов
Вот сценарий, который в конечном итоге сработал. Я думаю, что бит, который я изначально упускал, который мешал ему работать удаленно, был unset GIT_DIR
#!/bin/sh
cd /path/to/working-copy/ || exit
unset GIT_DIR
git pull repo branch
exec git-update-server-info
Попробуйте вместо этого:
#!/bin/sh
cd /path/to/working-copy/
env -i git pull
Несмотря на это, GIT_DIR просто не работает.
проблема возникает, когда вы неправильно установили GIT_DIR где-то еще.
Вы можете просто добавить это вместо: GIT_DIR=.git/ Это будет работать
В моем случае я указал рабочее дерево, и это нарушает некоторые команды, такие как pull
(или точнее fetch
).
Чтобы сбросить рабочее дерево, если оно есть в вашем git config через:
git config --unset core.worktree
(Есть и другие способы настройки рабочего дерева)
Важно отметить,
Нет никаких изменений в том, что это ваша проблема, если вы сами не выкопали эту дыру вокруг себя, используя в первую очередь пользовательское рабочее дерево.
стеб:
Это подразумевает для меня, что внутренние механизмы git используют пути относительно рабочего дерева + .git/
в некоторых случаях. По моему опыту рабочие деревья не очень хорошо поддерживаются, за исключением самых фундаментальных частей git. Я не экспериментировал полностью, Git, вероятно, вел бы себя, если бы я правильно установил переменную конфигурации каталога git, с которой я не играл.
У вас, вероятно, есть проблема с разрешениями. Я не уверен, как у вас настроено голое репозиторий, но работает ли он под git
пользователь, убедитесь, что git
Пользователь может выполнять git pull
в каталоге вашего проекта.
При желании попробуйте это, чтобы узнать, кем вы являетесь, когда запускается ловушка:
echo `whoami`