Files
gerrit/(红头)gerrit问题解决.txt

310 lines
9.1 KiB
Plaintext
Raw Permalink Normal View History

2025-12-22 17:12:39 +08:00
================================================================================
Gerrit 问题解决方案文档
================================================================================
文档名称Gerrit 登录和推送问题解决方案
创建日期2025-12-15
适用版本Gerrit 3.3.8
服务器地址http://101.43.95.130:8080
================================================================================
一、登录问题解决方案
================================================================================
问题现象:
----------
- 点击 Account ID 登录后,界面仍然显示 "ANONYMOUS"(匿名用户)
- 服务器端登录成功日志显示账户ID但浏览器界面显示匿名
问题根源:
----------
这是浏览器的 Cookie 安全策略导致的。现代浏览器Chrome/Edge/Firefox
Cookie 有严格的安全限制,特别是 SameSite 属性。
解决方案:
----------
【方案一】修改 Chrome 浏览器的 SameSite 标志(推荐)
1. 在 Chrome 地址栏输入chrome://flags/
2. 在搜索框输入SameSite
3. 找到以下选项并修改:
- "SameSite by default cookies" → 设置为 Disabled
- "Cookies without SameSite must be secure" → 设置为 Disabled
4. 点击右下角的"重新启动"按钮
5. 清除浏览器 CookieCtrl+Shift+Delete选择"所有时间",清除 Cookie
6. 重新访问http://101.43.95.130:8080
7. 点击 Account ID 登录
【方案二】修改 Firefox 浏览器的配置
1. 在 Firefox 地址栏输入about:config
2. 点击"接受风险并继续"
3. 在搜索框输入network.cookie.sameSite.noneRequiresSecure
4. 双击该选项,将值改为 false
5. 重启 Firefox
6. 清除浏览器 Cookie
7. 重新访问http://101.43.95.130:8080
8. 点击 Account ID 登录
【方案三】服务器端配置(已完成)
服务器端已配置:
- cookieSecure = false允许 HTTP 使用 Cookie
- cookieSameSite = LAX允许跨站 Cookie
- canonicalWebUrl = http://101.43.95.130:8080/(正确的访问地址)
================================================================================
二、代码推送问题解决方案
================================================================================
问题现象:
----------
- HTTP 推送失败remote: Unauthorized
- SSH 推送失败Permission denied (publickey) 或 no mutual signature algorithm
问题根源:
----------
1. HTTP 认证DEVELOPMENT_BECOME_ANY_ACCOUNT 模式对 HTTP Basic 认证支持有限
2. SSH 认证OpenSSH 10.0 默认禁用了某些旧的签名算法(如 RSA-SHA1
而 Gerrit 3.3.8 使用的 Apache SSHD 可能不支持新的签名算法
解决方案:
----------
【步骤一】配置 SSH 密钥
1. 生成 SSH 密钥(如果还没有):
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
2. 查看公钥内容:
cat ~/.ssh/id_rsa.pub
# Windows Git Bash 使用:
type ~/.ssh/id_rsa.pub
3. 将公钥添加到 Gerrit
- 访问http://101.43.95.130:8080/#/settings/ssh-keys
- 在 "New SSH key" 输入框中粘贴完整公钥
- 点击 "Add" 保存
【步骤二】创建 SSH 配置文件(解决签名算法问题)
在本地电脑上创建 SSH 配置文件:
1. 创建配置文件:
mkdir -p ~/.ssh
cat > ~/.ssh/config << 'EOF'
Host 101.43.95.130
Port 29418
PubkeyAcceptedKeyTypes +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
EOF
2. 设置正确的权限:
chmod 600 ~/.ssh/config
3. 验证配置:
cat ~/.ssh/config
【步骤三】测试 SSH 连接
ssh -p 29418 renjianbo@101.43.95.130 gerrit version
如果成功会显示gerrit version 3.3.8
【步骤四】配置 Git 使用 SSH
1. 删除 HTTP 远程仓库:
git remote remove origin
2. 添加 SSH 远程仓库:
git remote add origin ssh://renjianbo@101.43.95.130:29418/test-project
3. 验证远程仓库配置:
git remote -v
【步骤五】注册邮箱地址
1. 访问http://101.43.95.130:8080/#/settings/email-addresses
2. 在 "New Email Address" 输入框中输入您的邮箱地址
3. 点击 "Add" 按钮
4. 如果需要验证,按提示完成验证
【步骤六】安装 commit-msg hook添加 Change-Id
1. 下载 commit-msg hook
cd /d/ttt/test-project
mkdir -p .git/hooks
curl -o .git/hooks/commit-msg http://101.43.95.130:8080/tools/hooks/commit-msg
chmod +x .git/hooks/commit-msg
2. 修改最后一次提交(添加 Change-Id
git commit --amend --no-edit
【步骤七】推送代码
git push origin HEAD:refs/for/master
推送成功后Gerrit 会返回变更 URL例如
remote: http://101.43.95.130:8080/c/test-project/+/1 [NEW]
================================================================================
三、防火墙配置(如果 SSH 连接超时)
================================================================================
如果 SSH 连接超时Connection timed out需要配置防火墙
【云服务器】
1. 登录云控制台(阿里云、腾讯云等)
2. 找到安全组配置
3. 添加入站规则:
- 协议TCP
- 端口29418
- 源0.0.0.0/0或您的 IP
4. 保存规则
【本地服务器】
sudo firewall-cmd --permanent --add-port=29418/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports | grep 29418
================================================================================
四、完整操作流程示例
================================================================================
【首次设置】
1. 配置 SSH 密钥和配置文件(见上述步骤一、二)
2. 克隆项目:
git clone ssh://renjianbo@101.43.95.130:29418/test-project
cd test-project
3. 安装 commit-msg hook
mkdir -p .git/hooks
curl -o .git/hooks/commit-msg http://101.43.95.130:8080/tools/hooks/commit-msg
chmod +x .git/hooks/commit-msg
4. 配置 Git 用户信息:
git config user.name "Your Name"
git config user.email "your_email@example.com"
【日常开发流程】
1. 修改代码
2. 提交代码:
git add .
git commit -m "Your commit message"
3. 推送代码评审:
git push origin HEAD:refs/for/master
4. 在 Gerrit Web 界面进行评审
5. 如果有修改意见,修改后重新推送:
git commit --amend
git push origin HEAD:refs/for/master
6. 合并后,更新本地仓库:
git checkout master
git pull origin master
================================================================================
五、常见问题排查
================================================================================
【问题1】SSH 连接超时
检查项:
- 防火墙是否开放 29418 端口
- 云服务器安全组是否配置正确
- Gerrit SSH 服务是否运行bin/gerrit.sh status
【问题2】SSH 认证失败Permission denied
检查项:
- 公钥是否已添加到 Gerrit
- SSH 配置文件是否正确
- 用户名是否正确Settings → Profile
【问题3】缺少 Change-Id
解决:
- 安装 commit-msg hook见步骤六
- 使用 git commit --amend --no-edit 修改提交
【问题4】邮箱地址未注册
解决:
- 访问 Settings → Email Addresses
- 添加您的邮箱地址
【问题5】HTTP 推送失败
解决:
- 使用 SSH 方式推送(推荐)
- 或配置 gitBasicAuth = true服务器端已配置
================================================================================
六、服务器端配置摘要
================================================================================
当前服务器配置(/home/renjianbo/gerrit_install/review_site/etc/gerrit.config
[gerrit]
basePath = git
canonicalWebUrl = http://101.43.95.130:8080/
serverId = fab2bec9-a17c-434d-9a25-76a7f2675339
[database]
type = h2
database = db/ReviewDB
[auth]
type = DEVELOPMENT_BECOME_ANY_ACCOUNT
gitBasicAuth = true
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = http://*:8080/
cookieSecure = false
cookieSameSite = LAX
cookiePath = /
[cache]
directory = cache
[index]
type = LUCENE
[receive]
enableSignedPush = false
================================================================================
七、重要提示
================================================================================
1. SSH 方式比 HTTP 更可靠,强烈推荐使用 SSH 推送代码
2. 安装 commit-msg hook 后,以后的所有提交都会自动包含 Change-Id
3. 创建 SSH 配置文件后,以后可以直接使用 git push不需要每次都
输入长命令
4. 如果遇到问题,查看服务器日志:
cd /home/renjianbo/gerrit_install/review_site
tail -f logs/httpd_log
tail -f logs/sshd_log
5. 常用链接:
- Gerrit 主页http://101.43.95.130:8080
- 所有变更http://101.43.95.130:8080/#/q/status:open
- 我的变更http://101.43.95.130:8080/#/q/owner:renjianbo
- SSH Keyshttp://101.43.95.130:8080/#/settings/ssh-keys
- Email 地址http://101.43.95.130:8080/#/settings/email-addresses
================================================================================
文档结束
================================================================================