Git статус возвращается фатально: не репозиторий git, а. git существует, и HEAD имеет соответствующие разрешения
Когда я запускаю статус git в своем репо, я получаю fatal: Not a git repository: /my repo/.git/modules/docs
Я проверил и .git существует и содержит HEAD с соответствующими разрешениями. Я могу выполнять различные другие команды в порядке. Если я запустил git gui, он отлично откроется и отобразит пару измененных файлов, но их не хватает.
Я предполагаю, что в HEAD может быть какая-то коррупция, но не уверен. Любая идея, как исправить это, не уничтожая все репо?
Обновление: я понял, что изменил имя каталога репо. Справочник, на который ссылается ошибка, - это старое имя каталога. Поэтому мой текущий репо находится в /new dir/.git
, но ошибка говорит Not a git repository: /old dir/.git/modules/docs
. Так может быть, git запутан?
Ответы
Ответ 1
Наконец-то я выяснил, что проблема связана с проблемой с одним из подмодулей. Простое переименование каталога репо вызвало конфликт с этим подмодулем. После просмотра обсуждения в Как переименовать репозиторий git с помощью подмодулей? я понял, что клонирование репо - лучший способ пойти, вместо того чтобы переименовать каталог и что решил проблему с подмодулем.
Ответ 2
Эти два файла содержат абсолютный путь подмодуля:
{submodule}/.git
.git/modules/{submodule}/config
Итак, если вы переместили репо, абсолютный путь в этих двух файлах недействителен и выдает ошибку 'not a git repository'. Просто исправьте эти файлы вручную.
Ответ 3
В предыдущих версиях git использовался абсолютный путь для определения gitdir подмодуля. Решение выглядит следующим образом:
- Обновите git до последней версии. Некоторые говорят, что вам понадобится хотя бы версия 1.7.10. Я просто решил проблему с помощью git 1.8.3.
- Удалите все сломанные папки подмодулей:
rm -rf broken_submodule_folder
- Обновить зарегистрированные подмодули:
git submodule update
. Вы должны видеть, что подмодули проверяются.
Ответ 4
Следуя @ax003d answer, вы можете заменить все старые пути (old/path
) новым путем (new/path
) с помощью этой команды:
find . -type f \( -name ".git" -o \( -path "*.git/modules/*" -name config \) \) -print0 | xargs -0 sed -i -e "s#old/path#new/path#g"
Возможно, вам захочется проверить, как выглядят старые пути, прежде чем заменять их:
find . -type f \( -name ".git" -o \( -path "*.git/modules/*" -name config \) \) -print0 | xargs -0 grep --colour "old/path"
Ответ 5
Я решил эту проблему, переиздав все git -подстановки с
rm -rf .git/modules
git submodule update --init
Ответ 6
Я столкнулся с этой проблемой и с подмодулями, но после анализа двух файлов
{подмодуль}/. Мерзавец
.git/модули/подмодули/{подмодуль}/конфигурации
Я понял, что в моем случае это не проблема.
После небольшого исследования я обнаружил, что в моем случае мне пришлось добавить git (команда: module add git), и ошибка исчезла.
Ответ 7
В моем случае проблема заключалась в том, что файл .git/HEAD нигде не указывал, он просто содержал последовательность странных символов. Я скопировал содержимое .git/ORIG_HEAD в .git/HEAD, и он снова работал.
Источник