【问题标题】:git clone - default branchgit clone - 默认分支
【发布时间】:2016-07-11 11:05:27
【问题描述】:

从我的 gitlab 服务器克隆 git 存储库后,它不会检出 master,因为 origin/HEAD 指向其他一些分支“origin/foo”。在gitlab中,默认分支设置为master。

如何将 origin/HEAD 从 'origin/foo' 移动到指向 'origin/master',以便进一步的克隆自动签出 origin/master?

克隆后,git remote show origin 状态:

HEAD branch: foo

git remote -r 秒:

origin/HEAD -> origin/foo

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

【问题讨论】:

    标签: git gitlab


    【解决方案1】:

    我认为,对于这个问题,您需要在远程操作。做类似的事情:

    git 结帐大师。

    让 HEAD 引用 master。

    【讨论】:

    • 远程端是裸 git,实际上无法访问原始 git 命令,因为它托管在 gitlab 上。我必须在客户端做一些魔术,然后将这些更新发送到远程。
    • @rralf 至于本地技巧,我只能想到本地命令别名,即在您的 .gitconfig 中设置 clone -b master 的别名并使用此别名而不是原始克隆命令。
    【解决方案2】:

    这只能在服务器端完成。对于 GitLab,它在您的项目、设置(左侧边栏中的最后一项)、“默认分支”(第三个文本字段)中完成。

    目前(2016 年 3 月)显然存在一个问题,这意味着 GitLab 报告的默认分支并不总是与 git remote show origin 报告的 HEAD 分支相同。将 GitLab 默认分支设置为其他任何分支,然后将其设置回主分支,这对 @rralf 有效。

    【讨论】:

    • 嗯——正如我已经说过的:Gitlab 默认分支已经设置为 master
    • 是的 - 我知道,它已设置为 master!我只是将其设置为其他内容,然后再次将其重置为 master。我目前正在克隆它,看看它现在是否有效。
    • 好的,更改 gitlab 默认分支并将其重置为 master 解决了我的问题。也许您可以将此提示添加到您的答案中,然后我会接受。似乎是 gitlab 深处的一些奇怪的错误...
    • 吃完午饭回来。添加了提示。
    【解决方案3】:

    除了Paul Hicks' answer,值得补充的是,如果您的客户端 git 非常旧(也就是说,早于 1.8.5,尽管修复程序也向后移植到 1.8.4.3),它可能不会选择无论如何正确的分支。

    当服务器的HEAD 引用解析为同时也是多个 分支的尖端的提交ID 时,就会出现问题。在这些旧版本的 git 上,clone 进程无法理解 HEAD -> ... 方向,而只是获取 HEAD 解析的原始提交 ID。它还获取每个分支的提交 ID,然后选择具有该提交 ID 的某个分支(本质上是随机的)。

    新客户协商符号样式转移,每次都获得正确的分支。但是,如果您坚持使用旧的,一种解决方法是确保 HEAD 解析到的 ID 仅与一个分支相关联。也就是说,对于匹配的每个其他分支,进行一个虚拟提交,以便该分支的尖端不再是相同的 ID。

    (如果服务器太旧,这也会失败,因为那些旧服务器在协商阶段不接受符号传输选项,但当然 GitLab 并没有像我们赢得的某些 Linux 发行版那样停留在过去十年中' t CentOname,咳咳)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 2018-08-08
      • 1970-01-01
      • 2014-07-05
      • 2014-05-22
      相关资源
      最近更新 更多