статус 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 запутался?

455   7  
git

7 ответов:

эти два файла содержат абсолютный путь подмодуля:

{submodule}/.git
.git/modules/{submodule}/config

Итак, если вы переместили РЕПО, абсолютный путь в этих двух файлах недействителен и вызывает ошибку "не репозиторий git". Просто исправьте эти файлы вручную.

прежние версии git использовали абсолютный путь для поиска gitdir подмодуля. Решение заключается в следующем:

  1. обновить git до последняя версия. Некоторые говорят, что вам понадобится по крайней мере версия 1.7.10. Я только что успешно решил проблему с git 1.8.3.
  2. удалить все сломанные папки подмодуля:rm -rf broken_submodule_folder
  3. обновить зарегистрированные подмодули: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-подмодули с

rm -rf .git/modules
git submodule update --init

в моем случае проблема была .файл git / HEAD никуда не указывал, он просто содержал последовательность странных символов. Я скопировал содержимое .git / ORIG_HEAD to .git / HEAD и это снова сработало.

источник

Я столкнулся с этой проблемой и с подмодулями, но после анализа двух файлов

{субмодуль}/.мерзавец .git / modules / submodules / {submodule} / config

Я понял, что в моем случае это не было проблемой.

после небольшого исследования я обнаружил, что в моем случае мне пришлось добавить git (command : module add git), и ошибка исчезла.

Comments

    Ничего не найдено.