Ответ 1
Если у вас есть не-голый репозиторий git, для него есть две части: каталог git и рабочее дерево. На рабочем дереве вы можете проверить исходный код с любыми изменениями, которые вы могли бы сделать. Каталог git обычно называется .git
и находится на верхнем уровне вашего рабочего дерева - это содержит всю историю вашего проекта, настройки конфигурации, указатели на ветки, индекс (область постановки) и т.д. Ваш каталог git - это тот, который содержит файлы и каталоги, которые выглядят примерно так:
branches description HEAD index logs ORIG_HEAD refs
config FETCH_HEAD hooks info objects packed-refs
В то время как то, что я описал выше, является макетом по умолчанию в репозитории git, вы можете фактически установить любые каталоги в файловой системе в качестве своего каталога git и рабочего дерева. Вы можете изменить эти каталоги с их по умолчанию либо с параметрами --work-tree
и --git-dir
на git
, либо с помощью переменных среды GIT_DIR
и GIT_WORK_TREE
. Обычно, однако, их не нужно устанавливать.
Ошибка, которую вы видите, является одной из первых проверок, выполняемых git pull
- она должна запускаться из рабочего дерева. Я предполагаю, что это связано с тем, что вы установили переменные среды GIT_DIR
или GIT_WORK_TREE
. В противном случае лучше всего предположить, что ваш каталог .git
недоступен или поврежден каким-либо образом. Если вы перечислите содержимое /var/www/ninethsky/.git
, похоже ли это на список, указанный мной выше? Все ли файлы и каталоги читаются и записываются пользователем, которому вы выполняете команду, или могли ли они иметь свои разрешения?
Обновление: в ответ на пункты дополнительной информации вы обновили свой вопрос:
-
git init
предположительно терпит неудачу, потому что у вас все еще есть переменная средыGIT_WORK_TREE
, и, как сказано в сообщении об ошибке, если вы указываете дерево работы, вам также нужно указать каталог git. - Второй вариант (
git init --git-dir=/var/www/ninethsky
) терпит неудачу, потому что--git-dir
должен появиться передinit
.
Однако в этой ситуации вам не нужно указывать дерево работы вообще, 1 поэтому я бы удостоверился, что вы отключите переменные среды GIT_WORK_TREE
и GIT_DIR
.
1 Это можно считать плохой идеей сохранить ваш каталог .git
под /var/www
в случае, если вы случайно установили разрешения, чтобы он был доступен через Интернет, поэтому это может быть экземпляр, в котором вы хотите сохранить каталог git в другом месте, однако, поскольку эти параметры явно уже создают путаницу для вас, возможно, лучше сохранить часть git простой и запретить доступ к каталогу .git
другими способами.