git clone - 默认分支

5
在从我的GitLab服务器克隆git存储库后,它不会检出主分支,因为origin/HEAD指向其他分支“origin/foo”。在GitLab中,默认分支设置为master。
我该如何将origin/HEAD从“origin/foo”移动到指向“origin/master”,以便进一步的克隆自动检出origin/master?
克隆后,git remote show origin 状态如下:
HEAD branch: foo

git remote -r seconds that:

origin/HEAD -> origin/foo

我希望将HEAD分支指向master,在gitlab中,默认分支已经设置为master。

3个回答

5
这只能在服务器端完成。对于GitLab,您需要进入项目的“设置”(左侧边栏中的最后一项),然后找到“默认分支”(第三个文本框)进行更改。 GitLab项目设置页面的屏幕截图 显然,目前存在一个问题(2016年3月),即GitLab报告的默认分支并不总是与git remote show origin报告的HEAD分支相同。将GitLab的默认分支设置为其他任何东西,然后再将其设置回主分支,已经被@rralf证实可以解决此问题。

嗯 - 正如我已经说过的那样:Gitlab默认分支已经设置为master。 - rralf
是的 - 我知道,它被设置为主分支!我只是将其设置为其他内容,然后重新设置为主分支。我目前正在克隆它,看看现在是否有效。 - rralf
好的,将GitLab的默认分支更改并将其重置回主分支解决了我的问题。也许你可以在你的答案中添加这个提示,那么我会接受它。似乎是GitLab内部的一些奇怪的bug... - rralf
1
午餐结束回来了。添加了提示。 - Paul Hicks

2
除了Paul Hicks的回答之外,值得一提的是,如果您的客户端git非常旧(也就是说,早于1.8.5,尽管修补程序已经被反向移植到1.8.4.3),它可能无法正确选择分支。 问题出现在服务器的HEAD引用解析为一个提交ID,该ID也是一个以上分支的末端。在这些旧版本的git上,clone进程无法理解HEAD -> ...方向,而只是获取HEAD解析到的原始提交ID。它还会获取每个分支的提交ID,然后选择某个分支——哪个基本上是随机的——具有该提交ID。 新的客户端协商符号样式传输,并每次都获得正确的分支。但是,如果您被困在旧状态中,则可以通过确保HEAD解析到的ID与仅关联一个分支来解决问题。也就是说,对于每个其他匹配的分支,都要进行虚拟提交,以便该分支的末端不再是相同的ID。 (如果服务器太旧,则也会失败,因为那些旧服务器在协商阶段不接受符号转移选项,但是GitLab当然不会像某些我们不会CentO名字的Linux发行版一样被困在上个十年。)

-1
对于这个问题,我认为你需要在远程端进行操作。可以尝试执行以下命令:

git checkout master

这样可以让HEAD指向master分支。

远程端是裸的 git,实际上无法使用原始的 git 命令进行访问,因为它托管在 GitLab 上。我必须在客户端上进行一些魔法,然后将这些更新发送到远程端。 - rralf
@rralf 关于本地技巧,我只能想到设置本地命令别名,即在您的 .gitconfig 中设置一个 clone -b master 的别名,并使用这个别名代替原始的 clone 命令。 - gzh

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