我的理解是,克隆存储库的默认分支将是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 hereThis answer确认。如果所有的符号引用都指向与HEAD相同的版本,则客户端将猜测要使用哪个分支。

最佳答案

Git 1.8.5开头,服务器将以“symref”功能发送HEAD指向的实际分支名称。如果您的客户端和服务器都比Git 1.8.5更新,它将正确更新HEAD

在此之前,客户端将比较HEAD(最终)指向的对象ID与所有分支的所有对象ID,从而猜测HEAD可能指向的对象。它更喜欢一个名为refs/heads/master的分支:如果HEADmaster都指向相同的对象ID,那么clone会将新存储库中的默认分支设置为master

否则,具有匹配OID的第一个分支(当按字母数字顺序对分支进行排序时)将是默认分支。如果没有分支具有匹配的OID,则HEAD将直接设置为对象ID(即,分离的HEAD)。

08-26 20:28
查看更多