Files
gerrit/(红头)gerrit问题解决.txt
2025-12-22 17:12:39 +08:00

310 lines
9.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
================================================================================
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
================================================================================
文档结束
================================================================================