Files
gerrit/安装commit-msg-hook.md
2025-12-22 17:12:39 +08:00

175 lines
3.8 KiB
Markdown
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 commit-msg Hook 指南
## 问题
推送代码时出现错误:
```
remote: ERROR: commit 5ee73b7: missing Change-Id in message footer
```
## 原因
Gerrit 要求每个提交都必须包含 `Change-Id`,用于跟踪代码变更。需要安装 `commit-msg` hook 来自动添加。
## 解决方案
### 方法一:使用 SCP 下载SSH 方式,推荐)
在您的项目目录中执行:
```bash
cd /d/zhini_im_android
# 下载 commit-msg hook
gitdir=$(git rev-parse --git-dir)
scp -p -P 29419 renjianbo@101.43.95.130:hooks/commit-msg ${gitdir}/hooks/
# 如果使用 OpenSSH >= 9.0,需要添加 -O 参数
# scp -O -p -P 29419 renjianbo@101.43.95.130:hooks/commit-msg ${gitdir}/hooks/
# 设置执行权限
chmod +x ${gitdir}/hooks/commit-msg
```
### 方法二:使用 HTTP 下载(如果 SSH 有问题)
```bash
cd /d/zhini_im_android
# 下载 commit-msg hook
f="$(git rev-parse --git-dir)/hooks/commit-msg"
curl -o "$f" http://101.43.95.130:8080/tools/hooks/commit-msg
chmod +x "$f"
```
### 方法三:手动创建目录并下载
```bash
cd /d/zhini_im_android
# 确保 hooks 目录存在
mkdir -p .git/hooks
# 下载 hookHTTP 方式)
curl -o .git/hooks/commit-msg http://101.43.95.130:8080/tools/hooks/commit-msg
# 设置执行权限
chmod +x .git/hooks/commit-msg
```
## 修复已提交的代码
安装 hook 后,需要修改最后一次提交以添加 Change-Id
```bash
cd /d/zhini_im_android
# 修改最后一次提交(会自动添加 Change-Id
git commit --amend --no-edit
# 重新推送
git push origin HEAD:refs/for/master
```
## 完整操作步骤
### 步骤 1安装 commit-msg hook
```bash
cd /d/zhini_im_android
# 使用 HTTP 方式下载(最简单)
f="$(git rev-parse --git-dir)/hooks/commit-msg"
curl -o "$f" http://101.43.95.130:8080/tools/hooks/commit-msg
chmod +x "$f"
```
### 步骤 2验证 hook 已安装
```bash
# 检查文件是否存在
ls -la .git/hooks/commit-msg
# 检查文件内容(应该看到 Gerrit commit-msg hook 的代码)
head -20 .git/hooks/commit-msg
```
### 步骤 3修改提交添加 Change-Id
```bash
# 修改最后一次提交
git commit --amend --no-edit
# 查看提交信息,确认 Change-Id 已添加
git log -1
```
您应该看到提交信息末尾有类似这样的内容:
```
Change-Id: I1234567890abcdef1234567890abcdef12345678
```
### 步骤 4重新推送
```bash
git push origin HEAD:refs/for/master
```
## 验证
推送成功后,您会看到类似这样的输出:
```
remote: Resolving deltas: 100% (55/55)
remote: Processing changes: refs: 1, new: 1
remote:
remote: SUCCESS
remote:
remote: http://101.43.95.130:8080/c/zhini_im_android/+/123 [NEW]
remote:
To ssh://101.43.95.130:29419/zhini_im_android
* [new branch] HEAD -> refs/for/master
```
## 后续使用
安装 hook 后,以后的所有新提交都会自动包含 Change-Id不需要手动添加。
## 常见问题
### Q: 如果 scp 命令失败怎么办?
**A:** 使用 HTTP 方式下载:
```bash
curl -o .git/hooks/commit-msg http://101.43.95.130:8080/tools/hooks/commit-msg
chmod +x .git/hooks/commit-msg
```
### Q: 如果有多个提交需要修复怎么办?
**A:** 可以使用交互式 rebase
```bash
# 假设需要修复最近 3 个提交
git rebase -i HEAD~3
# 在编辑器中,将要修改的提交标记为 "edit"
# 然后对每个提交执行:
git commit --amend --no-edit
git rebase --continue
```
### Q: hook 安装后不工作?
**A:** 检查:
1. 文件权限:`chmod +x .git/hooks/commit-msg`
2. 文件路径:确保在 `.git/hooks/` 目录下
3. Git 版本:确保 Git 版本支持 hooks
## 注意事项
- ✅ Hook 只需要安装一次,后续提交会自动使用
- ✅ 如果克隆新项目,需要重新安装 hook
- ✅ Hook 是项目级别的,每个项目都需要单独安装