从Gerrit克隆Git仓库遇update_ref失败问题,求解决方案
解决方案:克隆Gerrit仓库时出现non-commit对象写入分支错误
这个错误的核心原因是远程仓库的master分支指向了一个非提交(non-commit)对象(比如tag、blob或tree),Git无法将这类对象设置为本地分支的引用。以下是可行的解决步骤:
1. 跳过自动检出克隆仓库
首先用--no-checkout参数克隆仓库,避免自动尝试设置HEAD指向有问题的master分支:
git clone --no-checkout ssh://gerrit.codereview.com:29418/repo/abc cd abc
2. 验证远程分支的对象类型
执行以下命令确认远程master分支对应的对象类型:
# 查看远程master对应的哈希值 git ls-remote origin master # 检查该哈希值的对象类型 git cat-file -t ad3b40d1b582c561edd8a754d029db608f14a98c
输出如果是tag、blob或tree,就确认了分支指向非提交对象的问题。
3. 手动切换到有效分支
如果仓库内存在其他正常分支(比如dev),直接创建并切换到该分支:
git checkout origin/dev -b dev
之后可以正常拉取、推送该分支的内容。
4. 修复远程分支指向(需权限)
如果是仓库管理员,登录Gerrit系统,找到repo/abc仓库的master分支设置,将其重新指向一个合法的提交对象。完成后,其他用户重新克隆即可正常操作。
临时补救:手动修改HEAD指向
克隆后进入仓库,编辑.git/HEAD文件,将内容替换为存在的有效分支引用,例如:
ref: refs/heads/dev
保存后执行git checkout dev即可完成初始化。
内容的提问来源于stack exchange,提问作者user4948798
相关产品推荐
相关产品推荐

