"克隆存储库当前活动分支"是什么意思?

3
我已经成功地使用Git(也许这是一种乐观的评价)近两年了,但承认我有点盲目。出于某种原因,我开始对其内部机制更加好奇,并且最近一直在研究远程跟踪分支。总体上它们很有意义,但我还有一个问题:
当我克隆一个仓库并创建所有远程跟踪分支时,“克隆仓库的当前活动分支”是什么(引用自git-clone文档)?
如果我从同事的仓库进行克隆,我想这将是在git branch结果中带有*的任何本地分支的跟踪分支,但如果我从Github进行克隆呢?它只是我在界面中选择的分支吗?初步测试表明这不是这样的情况。
谢谢。

https://dev59.com/UXM_5IYBdhLWcg3wMgAF 有一些答案。 - VonC
1个回答

3
一个Git仓库的当前活动分支是其HEAD指向的分支。
在内部,HEAD只是一个文件,位于存储库的GIT_DIR顶部(非裸库的.git目录或裸库的顶部)。如果HEAD看起来像ref: refs/some/thing,那么它将被解释为命名引用的symref(符号引用)(通常是refs/heads/下的分支)。如果HEAD包含40个字节的ASCII十六进制对象名称表示(SHA-1),则我们说它是“分离的HEAD”(因为它没有“附加”到正常分支),它的工作方式类似于正常的ref(即它的工作方式类似于任何其他分支)。
如你所料,git branch将在当前活动分支之前显示一个星号。这适用于常规(非裸)和裸库。
在常规(非裸)存储库中(具有工作树的存储库),git checkout 的正常使用会自动维护 HEAD:
git checkout other-branch
# HEAD is now a symref to refs/heads/other-branch

裸仓库(通常用于服务器)没有工作树,因此git checkout不起作用。要更新裸仓库的HEAD,您必须使用git symbolic-ref
git symbolic-ref -m 'new default branch' HEAD refs/heads/other-branch
# HEAD is now a symref to refs/heads/other-branch

在这两种情况下,你都需要直接访问存储库以更新HEAD以更改当前活动分支。与大多数托管提供商一样,GitHub不提供对存储库的直接访问。然而,它提供了一个Web界面,让用户更改其存储库的HEAD(他们将其称为“默认分支”)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接