■ space · зонд прогулки · fig 1
Git поднимается по дереву в поисках .git, останавливается на первой — пять вещей ломают эту охоту, одна команда их разводит.
Запустите git rev-parse --show-toplevel || ls -a — одна команда разводит причины раньше, чем вы что-то тронете.
Корень напечатан → вы стоите снаружи репозитория; cd там ничего. Нет .git в ls -a → репозитория никогда не было: переклонируйте, не git init.
Ошибка в каждом репозитории машины → экспортирован GIT_DIR ; unset GIT_DIR.
01ПРОГУЛКА
git охотится за одной записью, вверх, и останавливается на первой — машина переигрывает охоту
$ git rev-parse --show-toplevel
/home/you/projects/myapp
НАЙДЕНО — ПРОГУЛКА ОСТАНОВИЛАСЬ НА .GITремонт — чинить нечего: прогулка здорова
СТАРТ src/api/ · ЭТАЖЕЙ ПРОЙДЕНО 2 · ВЕРДИКТ НАЙДЕНО
вы здесь → вы набрали git pull здесь → прогулка останавливается здесь, на первом встреченном .git
02ТАБЛИЦА ПРИЧИН
пять вещей ломают охоту — сопоставьте симптом со строкой
| симптом | вероятная причина | ремонт |
|---|---|---|
ошибка в одном проекте, ls -a не показывает .git | скачивание ZIP / скопированные файлы | git clone вообще |
| ошибка из подпапки, корень работает | стоите снаружи дерева | cd "$(git rev-parse --show-toplevel)" |
| ошибка в каждом каталоге, даже в тех, что работали | GIT_DIR экспортирован | unset GIT_DIR, вычистите его из профиля shell |
| ошибка внутри папки submodule | submodule не инициализирован | git submodule update --init --recursive |
.git — файл, ошибка остаётся | висящий указатель worktree/submodule | git worktree repair, иначе переклонируйте |
проверка: git rev-parse --show-toplevel → путь к корню репозитория, без ошибки
03ПЕРВЫЕ ДВЕ ЛГУТ
таблица чинит симптомы; первые две причины — там, где лжёт моторная память
cd в docs/ или src/api/ и привычка shell говорит, что корень здесь — git поднимается, не находит ничего, бросаетgit clone всегда создаёт подпапку с именем репозитория — checkout лежит уровнем ниже, чем там, где вы стоите.git, без истории, без remote.git как «скрытый мусор», заканчивает так жеgit rev-parse --show-toplevel # prints the root when one exists
cd "$(git rev-parse --show-toplevel)" # jump there in one step
ls -a # no .git here
git clone <url> # the fix — again, not git init
git initне чинит репозиторий — он создаёт пустой там, где вы стоите.
04ПОСЛЕДНИЕ ТРИ ЕДУТ ЗА ВАМИ
оставшиеся три — средовые: ошибка экспортируется, висит или не родилась
env | grep GIT_DIR # GIT_DIR=/some/old/path
unset GIT_DIR
~/.bashrc, ~/.zshrc, или CI-обёртке он экспортируется: вычистите там.git однострочным файлом называет каталог в другом месте диска; цель перенесена или удалена → указатель висит и ошибка остаётся, даже если .git вот же он — git worktree repair перешивает что умеет, иначе: переклонируйте.git внутри; git submodule update --init --recursive из родителя её заполняетбродяги без отслеживания путешествуют автостопом в скопированных деревьях — чистый проход их осаждает, как только клон на месте
конец пяти причин · ничего не fetched · всё локально