Получить "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`
Другие вопросы по тегам