由于不同原因,这似乎是一个常见的错误。
我有一个简单的裸 git 存储库,名为“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 http://kipdola.be/gitweb/?p=kiflea.git;a=summary
The warning: remote HEAD refers to nonexistent ref, unable to checkout.
意味着远程(裸)存储库包含分支参考在名为的文件中HEAD
其值与同一存储库中任何已发布的分支都不匹配。实际上,该文件定义了哪个分行克隆存储库后应默认签出。
请注意,该警告仅意味着 git 未进行结帐。克隆的存储库在其他方面都很好。做就是了git branch -a
查看可能的分支和git checkout the-branch-you-want
解决该问题。
这通常会发生,因为默认contents对于该文件(.git/HEAD
或普通HEAD
对于裸存储库)是ref: refs/heads/master
这说的是如果有人要clone
这个存储库,他们应该默认克隆分支refs/heads/master
。默认情况下,Git 将创建本地分支,无需refs/heads/
前缀(即master
默认情况下)。尝试git help symbolic-ref
了解更多信息。
这种情况的问题在于Git没有提供修改的方法remote符号引用,因此您要么使用 Git 托管提供商已实现的内容(例如,如果您具有管理员权限,则设置 - GitHub 中的默认分支),或者必须使用分支名称master
作为默认分支(因为这是文件的默认内容HEAD
如果您无法修改该文件,您将陷入困境master
永远)。
如果您有对远程 git 存储库的 shell 访问权限,您只需在remote机器并执行cd path/to/git/repo; git symbolic-ref HEAD refs/heads/XYZ
where XYZ
是您默认要使用的分支名称。
解决此问题的一种方法是创建一个没有提交的新远程裸存储库,然后执行git push name-of-the-remote my-special-branch-name
这将导致包含单个分支的裸存储库my-special-branch-name
但是HEAD
符号引用仍然包含指向的默认值master
。结果,您将收到上述警告。如果无法修改遥控器HEAD
文件,您可以使用语法发布您的分支git push name-of-the-remote my-special-branch-name:master
这意味着您当地的分支机构称为my-special-branch-name
应该作为分支发布master
在遥控器上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)