我的理解是,克隆存储库的默认分支将是HEAD指向要克隆的存储库中的任何内容。
我现在有一个情况不是这样。我的理解显然是有缺陷的,那么在克隆(裸机)存储库时如何确定默认的 check out 分支?
该存储库上的最后一次提交是将裸存储库HEAD中引用的分支与我作为克隆中的checkout分支获得的分支之间的合并。
运行git remote show origin
返回:
Fetch URL: ...
Push URL: ...
HEAD branch (remote HEAD is ambiguous, may be one of the following):
<bad-branch>
live
Remote branches:
...
裸仓库使用Git版本1.8.2.1,客户端使用1.7.12.4,传输方式为SSH。
也许答案实际上是this one here。 This answer确认。如果所有的符号引用都指向与HEAD相同的版本,则客户端将猜测要使用哪个分支。
最佳答案
以Git 1.8.5开头,服务器将以“symref”功能发送HEAD
指向的实际分支名称。如果您的客户端和服务器都比Git 1.8.5更新,它将正确更新HEAD
。
在此之前,客户端将比较HEAD(最终)指向的对象ID与所有分支的所有对象ID,从而猜测HEAD可能指向的对象。它更喜欢一个名为refs/heads/master
的分支:如果HEAD
和master
都指向相同的对象ID,那么clone会将新存储库中的默认分支设置为master
。
否则,具有匹配OID的第一个分支(当按字母数字顺序对分支进行排序时)将是默认分支。如果没有分支具有匹配的OID,则HEAD
将直接设置为对象ID(即,分离的HEAD)。