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 软件:
- 创建一个新的空目录,其中剩余的步骤 运行;
- 运行s
git init
创建一个空的 存储库(一个没有提交,里面什么都没有);
- 运行s
git remote add origin <url>
将URL保存在名字origin
下;
- 运行s 需要的任何
git config
个步骤(none 是,在这种情况下,但如果您添加 -c
个参数,则存在第 4 步);
- 运行s
git fetch origin
从响应给定 URL 的 Git 复制所有 提交;和
- 运行s
git checkout
或 git 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 main
或 git switch main
(替换为您想要的任何分支名称)。
换句话说,这是一个非常轻微的错误。这很烦人。您只需自己结帐,因为git clone
无法使用他们 推荐的名称。 克隆已经成功!
大约 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 软件:
- 创建一个新的空目录,其中剩余的步骤 运行;
- 运行s
git init
创建一个空的 存储库(一个没有提交,里面什么都没有); - 运行s
git remote add origin <url>
将URL保存在名字origin
下; - 运行s 需要的任何
git config
个步骤(none 是,在这种情况下,但如果您添加-c
个参数,则存在第 4 步); - 运行s
git fetch origin
从响应给定 URL 的 Git 复制所有 提交;和 - 运行s
git checkout
或git 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
就像
warning: remote HEAD refers to nonexistent ref, unable to checkout.
而不是 执行第 6 步。
要解决此问题 - 以您控制的方式*即使您无权访问 Gerrit 服务器 - 您可以:
- 提供一个
-b
参数,告诉您 Git 当您 运行git clone
或 您希望它创建哪个分支
- 失败后,只需 运行
git checkout main
或git switch main
(替换为您想要的任何分支名称)。
换句话说,这是一个非常轻微的错误。这很烦人。您只需自己结帐,因为git clone
无法使用他们 推荐的名称。 克隆已经成功!