迁移Gerrit实例后无法克隆仓库:SSH与Web界面正常但克隆停滞
Gerrit迁移后克隆仓库停滞在unpack阶段的排查方案
嘿,我之前也碰到过几乎一模一样的情况——Web界面正常、SSH连接测试成功,但克隆就是卡在unpack环节,给你几个针对性的排查方向,一步步来定位问题:
先从服务器端仓库权限和完整性入手
这是迁移场景下最常见的诱因,很容易在迁移过程中搞乱权限或损坏仓库数据:
- 确认Gerrit运行用户(通常是
gerrit2)对目标仓库目录有完整读写权限:
要保证目录所有者是sudo ls -ld /path/to/gerrit/git/REPO.gitgerrit2:gerrit2,目录权限至少为755,内部文件权限也需符合Git仓库的常规设置。 - 检查仓库数据完整性,切换到Gerrit用户后进入仓库目录执行:
如果输出出现su - gerrit2 cd /path/to/gerrit/git/REPO.git git fsckbroken 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
相关产品推荐
相关产品推荐

