У меня есть репозиторий, которым я пользуюсь годами через GitKraken. Я просто использовал CLI, чтобы назначить тег (используя код git tag -a v0.7.1 -m "my version 0.7.1" ea27f3b3ab882e58cbb5995f5d8638a200676a43
, затем git push --tags
) репозиторию, и после этого GitKraken не будет его открывать. Он говорит, что там нет репозитория, и спрашивает, хочу ли я инициализировать новый репо.
С другими моими репозиториями проблем нет. Кроме того, это репо отлично работает из командной строки. Я пробовал удалить папку вручную, затем снова клонировать ее с github в то же место, но это не помогло. Я также пробовал git reset --hard
локально, но безрезультатно. Некоторый поиск в Google показывает такие вещи, как длинные имена путей к глубоко вложенным файлам, но у меня этого нет (и я на MacOS, а не на Windows).
Есть идеи?
Эту проблему решил Джейк из команды GitKraken в Slack GitKraken. Я опубликую решение здесь, если оно может помочь кому-то в будущем.
Оказалось, что в моем репозитории было два искаженных ref
, один в мою ветку master
, другой в тот тег v0.7.1
, о котором я упоминал выше. Удаление тега и основной ветки решило проблему.
Я удалил основную ветку и самый последний тег
Я получил ту же ошибку, когда пытался открыть репозиторий. Когда я попытался клонировать любой репозиторий, я получил сообщение:
«C:/Users/Имя пользователя/.gitconfig»: доступ запрещен
Удалил файл, теперь оба сообщения пропали.
Любой, кто попытается это сделать, должен сохранить файл в другом месте на всякий случай.
Чтобы решить эту проблему, я использовал код Visual Studio, я открыл его в среде IDE и использовал расширение, чтобы зафиксировать все файлы внутри папки. Вот ссылка на найденное решениеСсылка на сайт
У меня была такая же проблема с GitKraken. Он будет продолжать отображать это сообщение «совместимый репозиторий», даже если он загрузит репо и позволит мне создавать и просматривать коммиты. Однако примерно через минуту он выгружает репо и начинает пытаться загрузить его снова, но просто зависает, пытаясь загрузить. Другие инструменты (Giggle, gitg
, git-gui и git
CLI) работали нормально.
Копнув немного глубже, я обнаружил, что, видимо, что-то испортилось в моем рефлоге. Вы можете проверить файлы в .git/logs/refs/heads/*
и .git/logs/refs/remotes/*/*
на наличие строк, которые выглядят крайне необычно. Все строки должны выглядеть примерно одинаково (от-хеш, до-хэш, метка времени, пользователь, сообщение и т. д.). Поврежденные строки в моем журнале содержали множество странных символов и были примерно в 4 раза длиннее других строк. Очень очевидно.
Я также нашел некоторые объекты с нулевым байтом, которых не должно быть. Это временные файлы, которые должны были быть заполнены данными или удалены, но не были по... причинам. Их можно смело удалять.
find .git/objects -size 0 -type f -delete
Чтобы мой GitKraken снова заработал, мне нужно выбрать вариант Nuclear Option.
Хорошо, если у вас все еще есть проблемы и вы ОПРЕДЕЛЕННЫЙ, что вам ничего не нужно в вашем журнале ссылок, ВКЛЮЧАЯ ВАШ ШКАФ, вы можете истечь все это сейчас и очистить (собрать мусор) оборванные ссылки:
git reflog expire --expire=now --all
git gc --prune=now
Ну, я предполагаю, что есть еще более экстремальный шаг, в котором вы можете удалить репо и повторно клонировать, но вы потеряете все локальные ветки, тайники и невыполненные коммиты. Меня это не устраивало.
и как вы нашли решение? Я имею в виду, что у меня похожая проблема, но я не знаю, как ее решить