статус git возвращает fatal: не репозиторий git, но.git существует и голова имеет соответствующие разрешения
когда я запускаю git статус на моем РЕПО я получаю fatal: Not a git repository: /my repo/.git/modules/docs
Я проверил и .git существует и содержит HEAD с соответствующими разрешениями. Я могу запускать различные другие команды отлично. Если я запускаю Git gui, он открывается нормально и перечисляет несколько измененных файлов, но их не хватает.
Я предполагаю, что там может быть какая-то коррупция в голове, не уверен, хотя. Есть идеи, как это исправить, не уничтожая все РЕПО?
обновление: я понял, что изменено имя каталога РЕПО. Каталог, на который ссылается ошибка, является старым именем каталога. Так что мое текущее РЕПО находится на /new dir/.git но ошибка говорит Not a git repository: /old dir/.git/modules/docs. Так, может быть, git запутался?
7 ответов:
эти два файла содержат абсолютный путь подмодуля:
{submodule}/.git .git/modules/{submodule}/configИтак, если вы переместили РЕПО, абсолютный путь в этих двух файлах недействителен и вызывает ошибку "не репозиторий git". Просто исправьте эти файлы вручную.
прежние версии git использовали абсолютный путь для поиска gitdir подмодуля. Решение заключается в следующем:
- обновить git до последняя версия. Некоторые говорят, что вам понадобится по крайней мере версия 1.7.10. Я только что успешно решил проблему с git 1.8.3.
- удалить все сломанные папки подмодуля:
rm -rf broken_submodule_folder- обновить зарегистрированные подмодули:
git submodule update. Вы должны увидеть, что подмодули проверяются.
Я, наконец, разобрался, что проблема была вызвана проблемой с одним из подмодулей. Простое переименование каталога РЕПО вызвало конфликт с этим подмодулем. После просмотра обсуждения в Как я могу переименовать репозиторий git с подмодулями? Я понял, что клонирование РЕПО-это лучший способ пойти вместо переименования каталога, и это решило проблему с подмодулем.
после @ax003d ответ, вы можете заменить все старые пути (
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"
в моем случае проблема была .файл git / HEAD никуда не указывал, он просто содержал последовательность странных символов. Я скопировал содержимое .git / ORIG_HEAD to .git / HEAD и это снова сработало.
Я столкнулся с этой проблемой и с подмодулями, но после анализа двух файлов
{субмодуль}/.мерзавец .git / modules / submodules / {submodule} / config
Я понял, что в моем случае это не было проблемой.
после небольшого исследования я обнаружил, что в моем случае мне пришлось добавить git (command : module add git), и ошибка исчезла.
Comments