получить "fatal: not git repository: '.'" при использовании перехвата пост-обновления для выполнения git pull в другом репо - PullRequest
80 голосов
/ 28 октября 2010

Я новичок в 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: '.'

Однако, если я SSH подключаюсь к серверу как пользовательские сайты и выполняю этот скрипт вручную, это прекрасно работает. Любые идеи относительно того, что может бытьчто-то не так с этим хуком или скриптом?

Ответы [ 5 ]

164 голосов
/ 04 ноября 2010

Вот скрипт, который в итоге сработал. Я думаю, что бит, который мне изначально не хватало, что мешало удаленной работе, был unset GIT_DIR

#!/bin/sh
cd /path/to/working-copy/ || exit
unset GIT_DIR
git pull repo branch

exec git-update-server-info
27 голосов
/ 26 декабря 2010

Попробуйте вместо:

#!/bin/sh
cd /path/to/working-copy/
env -i git pull
0 голосов
/ 25 сентября 2014

В моем случае я указал рабочее дерево, и это нарушает некоторые команды, например pull (или, точнее, fetch).

Чтобы сбросить рабочее дерево, если оно есть в вашей конфигурации git, выполните следующие действия:

git config --unset core.worktree

(Есть и другие способы настройки рабочего дерева)

Важно отметить,

Ваша проблема практически не изменится, если вы сами не выкопаете эту дыру вокруг себя, в первую очередь используя собственное рабочее дерево.

Подшучивание:

Для меня это означает, что в некоторых случаях внутренние механизмы git используют пути относительно рабочего дерева + .git/.По моему опыту рабочие деревья не очень хорошо поддерживаются, за исключением самых фундаментальных частей git.Я не экспериментировал полностью, Git, вероятно, вел бы себя, если бы я правильно установил переменную конфигурации каталога git, с которой я не играл.

0 голосов
/ 15 мая 2014

Несмотря на это сбросить GIT_DIR просто работает.

проблема возникает, когда вы неправильно установили GIT_DIR в другом месте

Вы можете просто добавить это вместо: GIT_DIR = .git / Это будет работать

0 голосов
/ 28 октября 2010

Возможно, у вас проблема с разрешениями. Я не уверен, как вы настроили ваше пустое git-репо, но если он работает под пользователем git, убедитесь, что пользователю git разрешено выполнять git pull в каталоге вашего проекта.

При желании попробуйте это, чтобы узнать, кем вы являетесь, когда запускается ловушка:

echo `whoami`
...