Gerrit 移动后无法克隆所有用户

Unable to clone All-Users after Gerrit move

大约 2 年前,我们将我们的 Gerrit 2.10 站点移到了一个新的数据中心,作为过程的一部分复制了回购协议。这可能是我第一次尝试访问“所有用户”存储库,我看到以下错误:

user@desktop=> git clone ssh://user@gerrit.whoi.edu:29418/All-Users
Cloning into 'All-Users'...
warning: remote HEAD refers to nonexistent ref, unable to checkout.

其他存储库未遇到此问题。有什么方法可以进行故障排除和补救吗?

转到 Gerrit > BROWSE > 存储库 > All-Users > Branches 并检查 HEAD 是否指向“refs/meta/config”。如果需要,请更正。

你有一个 Gerrit-specific 答案(在这种情况下使用的答案),但是如果有人在 non-Gerrit 上下文中偶然发现这个问题,这是发生了什么以及你因此可以做到。

当你 运行:

git clone <url>

(注意缺少 -b 参数),您的 Git 软件:

  1. 创建一个新的空目录,其中剩余的步骤 运行;
  2. 运行s git init 创建一个空的 存储库(一个没有提交,里面什么都没有);
  3. 运行s git remote add origin <url>将URL保存在名字origin下;
  4. 运行s 需要的任何 git config 个步骤(none 是,在这种情况下,但如果您添加 -c 个参数,则存在第 4 步);
  5. 运行s git fetch origin 从响应给定 URL 的 Git 复制所有 提交;和
  6. 运行s git checkoutgit switch(取决于您的 Git 年份)在您的新分支中创建一个分支存储库。

请注意,第 5 步从其他存储库复制所有 提交 不复制任何分支 。相反,它采用每个 分支名称 将这些名称更改为您自己的 remote-tracking 名称。 remote-tracking 名称——Git 误称为“remote-tracking 分支名称”——根本不是分支名称。这只是 您的 Git 软件在 您的 存储库中记住来自其他软件的 分支名称的一种方式Git 存储库.

第 5 步完成后,您有一个存储库,但是您还没有任何分支并且还没有签出任何提交 .现在是 Git 选择要创建的分支名称的时候了。您的 Git 应该为您创建哪个分支名称? Git 的答案是:无论您提供什么名称作为 -b 选项参数。但是您没有提供 -b 和参数。所以你的Git问他们的Git:你是哪个分支名,其他的Git,推荐我在这个新版本库中使用我刚做的?

在这里,另一个 Git 推荐了一些荒谬的东西——可能 refs/meta/config 就像 中的那样。你的 Git 对自己说:“这太疯狂了,我不能用那个。”你的 Git 然后气呼呼地放弃并打印:

warning: remote HEAD refers to nonexistent ref, unable to checkout.

而不是 执行第 6 步。

要解决此问题 - 以您控制的方式*即使您无权访问 Gerrit 服务器 - 您可以:

  • 提供一个 -b 参数,告诉您 Git 当您 运行 git clone
  • 您希望它创建哪个分支
  • 失败后,只需 运行 git checkout maingit switch main(替换为您想要的任何分支名称)。

换句话说,这是一个非常轻微的错误。这很烦人。您只需自己结帐,因为git clone 无法使用他们 推荐的名称。 克隆已经成功!