大約 2 年前,我們將 Gerrit 2.10 站點移動到了一個新的資料中心,并在此程序中復制了存盤庫。這可能是我第一次嘗試訪問“所有用戶”存盤庫,我看到以下錯誤:
user@desktop=> git clone ssh://[email protected]:29418/All-Users
Cloning into 'All-Users'...
warning: remote HEAD refers to nonexistent ref, unable to checkout.
其他存盤庫沒有遇到此問題。有什么方法可以排除故障和補救嗎?
uj5u.com熱心網友回復:
轉到Gerrit > BROWSE > Repositories > All-Users > Branches并檢查 HEAD 是否指向“refs/meta/config”。如果需要,請更正。

uj5u.com熱心網友回復:
您有一個特定于 Gerrit 的答案(這是在這種情況下使用的答案),但如果有人在非 Gerrit 背景關系中偶然發現這個問題,這就是正在發生的事情以及您可以做的事情。
當你運行時:
git clone <url>
(注意沒有-b引數),你的 Git 軟體:
- 創建一個新的空目錄,其余步驟在其中運行;
- 運行
git init以創建一個空存盤庫(一個沒有提交,里面什么都沒有); - 運行
git remote add origin <url>以將 URL 保存在 name 下origin; - 運行任何需要
git config的步驟(在這種情況下沒有步驟,但如果您添加-c引數,則存在步驟 4); - 運行
git fetch origin以復制在給定 URL 處回應的 Git 中的所有提交;和 - 運行
git checkout或git switch(取決于您的 Git 年份)在新存盤庫中創建一個分支。
請注意,從其他存盤庫復制所有提交的第 5 步不會復制任何分支。相反,它會獲取它們的每個分支名稱并將這些名稱更改為您自己的遠程跟蹤名稱。遠程跟蹤名稱——Git 相當誤導性地稱之為“遠程跟蹤分支名稱”——根本不是分支名稱。這只是您的Git 軟體在您的存盤庫中記住來自其他 Git 存盤庫的分支名稱的一種方式。
第 5 步完成后,您有一個存盤庫,但您還沒有任何分支,也沒有提交被簽出。現在是您的 Git 選擇要創建的分支名稱的時候了。你的 Git 應該為你創建哪個分支名稱?Git 的回答是:無論您作為-b選項引數提供什么名稱。但是您沒有提供-band 論點。所以你的 Git 會問他們的Git:你,其他 Git,推薦我在我剛剛創建的這個新存盤庫中使用哪個分支名稱?
在這里,另一個 Git 推薦了一些荒謬的東西——可能refs/meta/config就像Marcelo ávila de Oliveira 的回答一樣。你的 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無法使用他們推薦的名稱。 克隆已經作業了!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/470952.html
