You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移Gerrit实例后无法克隆仓库:SSH与Web界面正常但克隆停滞

Gerrit迁移后克隆仓库停滞在unpack阶段的排查方案

嘿,我之前也碰到过几乎一模一样的情况——Web界面正常、SSH连接测试成功,但克隆就是卡在unpack环节,给你几个针对性的排查方向,一步步来定位问题:

先从服务器端仓库权限和完整性入手

这是迁移场景下最常见的诱因,很容易在迁移过程中搞乱权限或损坏仓库数据:

  • 确认Gerrit运行用户(通常是gerrit2)对目标仓库目录有完整读写权限:
    sudo ls -ld /path/to/gerrit/git/REPO.git
    
    要保证目录所有者是gerrit2:gerrit2,目录权限至少为755,内部文件权限也需符合Git仓库的常规设置。
  • 检查仓库数据完整性,切换到Gerrit用户后进入仓库目录执行:
    su - gerrit2
    cd /path/to/gerrit/git/REPO.git
    git fsck
    
    如果输出出现broken link或missing object类错误,说明仓库数据损坏,优先从备份恢复,也可以尝试用git gc --prune=now修复(修复前务必备份仓库!)

测试SSH实际执行Git命令的情况

虽然SSH连接提示成功,但git clone本质是调用git-upload-pack命令,单独测试这个命令能直接定位问题:

ssh -v <user>@<ip> -p 29418 git-upload-pack REPO.git
  • 如果这个命令卡住,说明服务器端执行git-upload-pack时出了问题,去查看Gerrit的sshd_log和error_log(一般在/var/gerrit/logs/目录下),大概率能找到权限拒绝、进程卡死的具体日志。
  • 如果命令能正常返回仓库的pack信息,那问题可能在客户端:比如本地SSH代理干扰,或者当前SSH密钥对应的Gerrit用户没有该仓库的读取权限(去Gerrit Web界面确认用户的项目权限配置)。

排查网络和Gerrit SSHD配置

  • 先尝试克隆一个小仓库,如果小仓库正常、大仓库卡住,可能是网络带宽不足或服务器防火墙限制了SSH会话的传输速率,检查服务器防火墙规则,也可以临时调整Gerrit SSHD的超时参数:
    编辑Gerrit的etc/sshd_config,调整ClientAliveInterval和ClientAliveCountMax参数,之后重启Gerrit:
    gerrit restart
    
  • 另外,检查MaxSessions设置,如果数值太小,也可能导致并发克隆时出现会话阻塞。

最后验证客户端配置

确保客户端~/.ssh/config没有针对该Gerrit服务器的特殊配置干扰(比如强制指定错误密钥或代理),也可以直接指定密钥进行克隆测试:

git clone --verbose ssh://<user>@<ip>:29418/REPO --ssh-option="IdentityFile=~/.ssh/your-gerrit-key"

内容的提问来源于stack exchange,提问作者dutt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:58:54