получение " fatal: not a git repository:'.'"при использовании крючка после обновления для выполнения "git pull" на другом РЕПО


Я новичок в git, поэтому я прошу прощения (и, пожалуйста, поправьте меня), если я злоупотребляю терминологией здесь, но я сделаю все возможное.

Я пытаюсь настроить голый git repo (hub) и рабочую копию сайта разработки (prime) на веб-сервере. Я пытался сделать это после в этой статье. Я хочу, чтобы рабочая копия разработки обновлялась при каждом нажатии на репо-концентратор. Я под впечатлением, что правильный крюк для этого 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 78

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=.мерзавец/ Это будет работать

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

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

git config --unset core.worktree

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

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

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

Стеб:

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

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

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

echo `whoami`