Предупреждение: удаленный HEAD относится к несуществующим ref, неспособным проверить
Это кажется популярной ошибкой по разным причинам.
У меня есть простая голова git repo под названием "kiflea.git", я клонирую ее так:
git clone git://kipdola.be/kiflea.git
Тогда git говорит мне: warning: remote HEAD refers to nonexistent ref, unable to checkout.
И да, на карте нет версий файлов, кроме каталога .git.
Во всяком случае, единственное, что мне нужно сделать, это:
cd kiflea
git checkout master
И он работает, все файлы есть.
Но я думал, что клонирование репо автоматически проверяет мастера, так что происходит точно, и как его исправить?
Я заметил, что после бит git checkout master
это добавляется в мой локальный файл конфигурации .git:
[branch "master"]
remote = origin
merge = refs/heads/master
Вероятно, интересно узнать, что этот репозиторий git использовался как репозиторий svn в далеком прошлом.
Ps: при просмотре голого репозитория с помощью gitweb явно есть ветвь master
: http://kipdola.be/gitweb/?p=kiflea.git;a=summary
Ответы
Ответ 1
warning: remote HEAD refers to nonexistent ref, unable to checkout.
означает, что удаленный (голый) репозиторий содержит ссылку на ветку в файле HEAD
, которая не соответствует какой-либо опубликованной ветке в том же репозитории.
Обратите внимание, что предупреждение означает только, что git не выполнял проверку. Клонированный репозиторий в остальном просто отлично. Просто сделайте git branch -a
, чтобы увидеть возможные ветки и git checkout the-branch-you-want
, чтобы обойти проблему.
Это обычно происходит потому, что содержимое по умолчанию для этого файла (.git/HEAD
или plain HEAD
для голых репозиториев) ref: refs/heads/master
, в котором говорится, что если кто-то собирается в clone
этот репозиторий, он должен по умолчанию клонировать ветвь refs/heads/master
. По умолчанию git создаст локальную ветвь без префикса refs/heads/
(то есть master
по умолчанию). Попробуйте git help symbolic-ref
для получения дополнительной информации.
Проблема с этой ситуацией заключается в том, что git не предоставляет метод для модификации удаленных символических ссылок, поэтому либо вы используете то, что реализовал хостинг-провайдер git (например, "Настройки - ветвь по умолчанию в GitHub, если у вас есть права администратора" ) или вам нужно использовать имя ветки master
как ветку по умолчанию (потому что это значение по умолчанию для этой символической ссылки).
Один из способов решить эту проблему - создать новое удаленное обнародованное репо без коммитов, а затем сделать git push name-of-the-remote my-special-branch-name
, что приведет к созданию открытого репозитория, содержащего единственную ветвь my-special-branch-name
, но символ HEAD
symbolic ref по-прежнему содержит значение по умолчанию значение, указывающее на master
. В результате вы получите вышеупомянутое предупреждение.
Ответ 2
У меня была такая же проблема, потому что я больше не использовал ветку master
, и она потерялась как в моем локальном, так и удаленном репозитории.
У удаленного репозитория все еще был установлен HEAD
на master
, я изменил его на одну из удаленных ветвей, которые я использую, и все работает нормально.
Если вы можете получить доступ к удаленному репозиторию:
- Перейдите к
remote_repo.git
;
- Изменить
HEAD
файл
- Измените
ref: refs/heads/master
на ref: refs/heads/your_branch
Ответ 3
Да, это связано с вашим клоном git, который пытается проверить ветвь, отличную от мастера. Просто сделайте это
git clone [email protected]:project_name.git -b branch_name /some/folder
Это поможет вам клонировать точную ветку с помощью ее имени ветки.
Ответ 4
Несмотря на то, что эта ошибка была отображена - мой проект все еще был подключен к соответствующему репозиторию - я запустил команду "git branch" и увидел соответствующие ветки - я тогда побежал 'git checkout * branchname' и BOOM - все было хорошо.
Ответ 5
В вашем удаленном репозитории определенно что-то не так. Возможно, вы сможете исправить это, создав новый клон репозитория. Также может работать и нажатие новой фиксации на ведущую ветку.
Ответ 6
Я бы предположил, что это ведущий *
в журнале фиксации, который каким-то образом обманывает удаленный сервер.
Я могу просматривать веб-интерфейс репо с помощью некоторых ссылок на меню, но другие терпят неудачу с помощью 404 - Unknown commit object
или подобных, особенно с итоговой страницы.
Посмотрите, можете ли вы изменить это последнее сообщение фиксации, а затем принудительно нажать на обновление, чтобы узнать, исправляет ли он это. На сервере может появиться ошибка. Если он исправит это, стоит сообщить в список git git @vger.kernel.org(только текстовые сообщения)