libgit2 вернул: Refspec 'refs / Heads / origin / HEAD' not found error в TortoiseGit

Я получил эту ошибку при запуске TortoiseGit:

Снимок экрана диалогового окна с ошибкой

Не удалось получить все ссылки.
libgit2 вернула: Refspec 'refs / Heads / origin / HEAD' не найден

Это раздражает, но не мешает мне использовать TortoiseGit. Однако я бы хотел убрать это, потому что это, ну, раздражает. Как я могу это исправить?


person Community    schedule 02.09.2013    source источник
comment
Я получил это при смене репозитория Github с Github flow на git-flow. Я добавил ветку «разработка» в качестве нового значения по умолчанию и удалил главную ветвь. Принятый ответ исправил это.   -  person angularsen    schedule 31.01.2014
comment
Создан отчет об ошибке: gitlab.com/tortoisegit/tortoisegit/issues/2926   -  person Charlie    schedule 10.02.2017


Ответы (1)


Обновленный ответ

Получается, что с целью обновления представления локального репо, на которое указывает ветвь <remote>/HEAD, вы можете настроить git автоматически, чтобы получить эту информацию с пульта дистанционного управления и установить ее локально для вас, вместо того, чтобы вручную устанавливать его с помощью git symbolic-ref, как в моем старом решении выше:

git remote set-head <remote> --auto

# Or shorter
git remote set-head <remote> -a

Обратите внимание, что эта команда фактически не меняет ветку по умолчанию в самом удаленном репо. Для этого вам, вероятно, понадобится используйте git symbolic-ref непосредственно в удаленном репо, если у вас есть к нему доступ.

Старый ответ

Проблема, о которой говорится в сообщении об ошибке, заключается в том, что, по-видимому, libgit2 пытается прочитать удаленную ветвь по умолчанию, на которую указывает refs/remotes/origin/HEAD, но удаленная ветка не существует, поэтому возникает ошибка.

Используя git branch -a, мое локальное репо считает, что origin/develop является удаленной ветвью по умолчанию:

remotes/origin/HEAD -> origin/develop

В какой-то момент origin/develop действительно был веткой по умолчанию в моем origin репозитории на GitHub, но теперь это уже не ветка master. Ветвь develop была удалена из origin, поскольку она больше не нужна.

Поэтому я исправил это, вручную обновив локальную ссылку origin/HEAD, чтобы указать на новую ветку по умолчанию на origin:

git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master

Или, если бы я хотел добавить сообщение в журнал ссылок для refs/remotes/origin/HEAD:

git symbolic-ref -m "Update to new remote default branch" \
refs/remotes/origin/HEAD refs/remotes/origin/master

Это решило проблему. Смотрите также:

  1. Документация для git symbolic-ref.
  2. Git: правильный способ изменения Активная ветвь в голом репозитории?.
  3. Как изменить удаленную HEAD Git так, чтобы она указывала на что-то помимо «master».
person Community    schedule 02.09.2013
comment
+1 Я случайно удалил origin / HEAD (да, глупо !!!) и смог восстановить благодаря вашему ответу! :) - person Friederike; 02.10.2014
comment
Спасибо. Пришлось использовать git remote set-head origin production, поскольку было Multiple remote HEAD branches. - person Răzvan Flavius Panda; 28.07.2015