diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 920beea..844b8bb 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -20,23 +20,8 @@ "icon": "lucide-file", "title": "cursor" } - }, - { - "id": "42dcaa0fed1f392a", - "type": "leaf", - "state": { - "type": "markdown", - "state": { - "file": "docs/Obsidian/2026-01-05 个人文档管理.md", - "mode": "source", - "source": false - }, - "icon": "lucide-file", - "title": "2026-01-05 个人文档管理" - } } - ], - "currentTab": 1 + ] } ], "direction": "vertical" @@ -198,8 +183,20 @@ "bases:创建新数据库": false } }, - "active": "42dcaa0fed1f392a", + "active": "5b497a77c6d68c73", "lastOpenFiles": [ + "docs/gerrit/gerrit提交代码时遇到钩子问题的解决办法.md", + "docs/gerrit/gerrit分支规范.md", + "docs/gerrit/gerrit上传代码详细指南.md", + "docs/gerrit", + "gerrit/gerrit分支规范.md", + "gerrit/gerrit上传代码详细指南.md", + "docs/学习笔记/gerrit上传代码详细指南.md", + "gerrit/gerrit提交代码时遇到钩子问题的解决办法.md", + "gerrit", + "docs/Obsidian/高频命令.md", + "docs/Obsidian/欢迎.md", + "docs/Obsidian/2026-01-05 个人文档管理.md", "docs/renjiabo/hello.md", "更新部署脚本/部署脚本使用说明.md", "更新部署脚本/deploy.sh", @@ -211,8 +208,6 @@ "部署脚本使用说明.md", "deploy.py", "deploy_config.json", - "deploy.bat", - "deploy.sh", "docs/index.md", "文档完善提示词模板.md", "使用说明.md", @@ -225,16 +220,6 @@ "docs/Obsidian笔记体系/Archive/项目-旧版ROM适配/项目A-旧版ROM适配-README.md", "docs/Obsidian笔记体系/Archive/领域-已废弃API研究/README.md", "docs/Obsidian笔记体系/Archive/项目-旧版ROM适配/README.md", - "docs/Obsidian笔记体系/Archive/资源-历史会议记录/README.md", - "docs/Obsidian笔记体系/Archive/README.md", - "docs/Obsidian笔记体系/Config/插件列表与配置.md", - "docs/Obsidian笔记体系/MOCs/高频问题索引.md", - "docs/Obsidian笔记体系/MOCs/Android Framework知识体系图.md", - "docs/Obsidian笔记体系/Daily/2024-06-02.md", - "docs/Obsidian笔记体系/Daily/2024-06-01.md", - "docs/Obsidian笔记体系/Resources/论文/移动操作系统前沿/移动系统安全研究.md", - "docs/Obsidian笔记体系/Resources/论文/移动操作系统前沿/移动边缘计算研究.md", - "docs/Obsidian笔记体系/Resources/论文/移动操作系统前沿/README.md", - "docs/Obsidian笔记体系/Resources/论文/Android系统优化论文/Android内存管理优化.md" + "docs/Obsidian笔记体系/Archive/资源-历史会议记录/README.md" ] } \ No newline at end of file diff --git a/docs/学习笔记/gerrit上传代码详细指南.md b/docs/gerrit/gerrit上传代码详细指南.md similarity index 95% rename from docs/学习笔记/gerrit上传代码详细指南.md rename to docs/gerrit/gerrit上传代码详细指南.md index ee34892..752f064 100644 --- a/docs/学习笔记/gerrit上传代码详细指南.md +++ b/docs/gerrit/gerrit上传代码详细指南.md @@ -1,424 +1,424 @@ -# gerrit上传代码详细指南 - -# **Gerrit 代码上传详细指南** - -## **一、Gerrit 工作流程概述** - -``` -开发者 → 本地开发 → 推送代码审查 → Gerrit 评审 → 评审通过 → 合并代码 - ↑ ↓ - └─────────────── 需要修改 ← 评审不通过 ←───────────────┘ -``` - -## **二、环境准备** - -### **1. 安装必要的工具** - -```bash -# 安装 Git -sudo apt-get install git # Ubuntu/Debian -brew install git # macOS - -# 安装 commit-msg 钩子(关键步骤) -curl -Lo .git/hooks/commit-msg http://YOUR_GERRIT:8080/tools/hooks/commit-msg -chmod +x .git/hooks/commit-msg -``` - -### **2. 配置 Git 用户信息** - -```bash -git config --global user.name "你的姓名" -git config --global user.email "你的邮箱@company.com" -git config --global core.autocrlf input # Windows 用户重要! -git config --global core.safecrlf warn -``` - -### **3. 配置 SSH 密钥** - -```bash -# 生成 SSH 密钥 -ssh-keygen -t ed25519 -C "your_email@company.com" - -# 查看公钥 -cat ~/.ssh/id_ed25519.pub - -# 将公钥添加到 Gerrit: Settings → SSH Keys -``` - -## **三、日常开发流程** - -### **1. 克隆项目** - -```bash -# 方式1:通过 SSH(推荐) -git clone ssh://username@gerrit-server:29418/project-name - -# 方式2:通过 HTTP -git clone http://gerrit-server:8080/project-name -``` - -### **2. 创建开发分支** - -```bash -# 从 master 创建功能分支 -git checkout master -git pull origin master -git checkout -b feature/your-feature-name - -# 或者从特定版本创建 -git checkout -b feature/xxx release-1.0 -``` - -### **3. 进行开发** - -```bash -# 修改文件 -git add . -git status # 查看状态 - -# 提交代码(commit-msg 钩子会自动添加 Change-Id) -git commit -m "功能描述 - -详细描述: -1. 做了什么修改 -2. 为什么修改 -3. 测试情况 - -Bug: BUG-12345 # 如果有 Bug 编号 -Feature: FEAT-6789 # 如果有需求编号 - -Change-Id: I自动生成" -``` - -### **4. 推送代码审查** - -```bash -# 标准推送方式(创建/更新代码审查) -git push origin HEAD:refs/for/目标分支 - -# 示例: -git push origin HEAD:refs/for/master # 推送到 master 评审 -git push origin HEAD:refs/for/release-1.0 # 推送到 release 分支评审 -git push origin HEAD:refs/for/feature/xxx # 推送到功能分支评审 -``` - -## **四、推送参数详解** - -### **1. 普通推送** - -```bash -# 创建新的代码审查 -git push origin HEAD:refs/for/master - -# 创建草稿代码审查 -git push origin HEAD:refs/drafts/master -``` - -### **2. 推送并设置评审人** - -```bash -# 推送并添加 Reviewer -git push origin HEAD:refs/for/master%r=reviewer1@company.com,r=reviewer2@company.com - -# 推送并添加 CC -git push origin HEAD:refs/for/master%cc=manager@company.com - -# 推送并设置 Topic -git push origin HEAD:refs/for/master%topic=feature/login -``` - -### **3. 推送选项组合** - -```bash -# 完整示例 -git push origin HEAD:refs/for/master%\ -r=alice@company.com,\ -r=bob@company.com,\ -cc=manager@company.com,\ -topic=feature/login,\ -l=Code-Review+2,\ -l=Verified+1 -``` - -## **五、更新已有的代码审查** - -### **1. 修改后更新** - -```bash -# 修改代码后 -git add . -git commit --amend # 重要:必须使用 --amend 保留 Change-Id - -# 重新推送(会自动更新原有代码审查) -git push origin HEAD:refs/for/master -``` - -### **2. 基于评审意见修改** - -```bash -# 查看评审意见后修改 -git fetch origin refs/changes/XX/YYYY/Z && git checkout FETCH_HEAD -# 或者 -git review -d 12345 # 如果安装了 git-review - -# 修改代码 -git add . -git commit --amend - -# 重新推送 -git push origin HEAD:refs/for/master -``` - -### **3. 创建新的 Patch Set** - -```bash -# 每次 git commit --amend 后推送都会创建新的 Patch Set -git log --oneline -1 # 确认 Change-Id 存在 -git push origin HEAD:refs/for/master -``` - -## **六、解决常见问题** - -### **问题1:缺少 Change-Id** - -```bash -# 安装 commit-msg 钩子 -curl -Lo .git/hooks/commit-msg http://gerrit:8080/tools/hooks/commit-msg -chmod +x .git/hooks/commit-msg - -# 为现有提交添加 Change-Id -git commit --amend --no-edit # 重新提交,钩子会自动添加 - -# 或者手动添加 -git commit --amend -m "原提交信息 - -Change-Id: I旧的ChangeId" # 从 Gerrit 界面复制 -``` - -### **问题2:权限拒绝** - -```bash -# 检查 SSH 配置 -ssh -p 29418 username@gerrit-server - -# 检查公钥是否添加 -cat ~/.ssh/id_ed25519.pub - -# 检查项目权限 -# 联系管理员或查看 Gerrit Web 界面 -``` - -### **问题3:冲突无法推送** - -```bash -# 拉取最新代码 -git fetch origin -git rebase origin/master # 或者 git merge origin/master - -# 解决冲突 -git mergetool # 或手动解决 -git add . -git rebase --continue # 如果使用 rebase - -# 重新推送 -git push origin HEAD:refs/for/master -``` - -### **问题4:错误的分支目标** - -```bash -# 查看当前分支 -git branch -a - -# 查看远程分支 -git branch -r - -# 推送到正确的分支 -git push origin HEAD:refs/for/正确的分支名 -``` - -## **七、高级操作** - -### **1. 提交多个相关修改** - -```bash -# 创建多个提交 -git add file1 -git commit -m "修改1: 功能A" -git add file2 -git commit -m "修改2: 功能B" - -# 推送到同一个 Topic -git push origin HEAD~2:refs/for/master%topic=feature/xxx -``` - -### **2. 依赖链提交** - -```bash -# 第一个提交 -git commit -m "基础修改" - -# 第二个提交依赖第一个 -git commit -m "依赖修改" - -# 推送到 Gerrit 时保持依赖关系 -git push origin HEAD~1:refs/for/master -git push origin HEAD:refs/for/master%depends=第一个提交的Change-Id -``` - -### **3. 使用 git-review 工具** - -```bash -# 安装 -pip install git-review - -# 初始化 -git review -s - -# 提交代码审查 -git review - -# 下载代码审查 -git review -d 12345 # Change-Number -``` - -## **八、Gerrit Web 界面操作** - -### **1. 查看代码审查** - -- 访问:`http://gerrit:8080` -- 登录 → Dashboard → 查看你的代码审查 -- 点击 Change-Number 进入详情 - -### **2. 评审操作** - -- **+1 / -1**:代码风格、建议性意见 -- **+2 / -2**:代码评审通过/拒绝(需要权限) -- **Submit**:合并代码(需要权限) -- **Abandon**:放弃代码审查 -- **Rebase**:重新基于最新代码 -- **Cherry Pick**:应用到其他分支 - -### **3. 查看差异** - -- **Side-by-Side**:并排对比 -- **Unified Diff**:统一差异 -- **Patch Set**:切换不同版本 - -## **九、最佳实践** - -### **1. 提交信息规范** - -``` -一句话摘要(50字以内) - -详细描述: -• 做了什么修改 -• 为什么修改 -• 如何测试 -• 可能的影响 - -Bug: BUG-12345 -Feature: FEAT-6789 -Test: 通过单元测试/集成测试 - -Change-Id: I自动生成 -``` - -### **2. 代码审查前自查** - -```bash -# 1. 运行代码检查 -git diff --check # 检查空白字符 - -# 2. 运行测试 -npm test # 或 mvn test, pytest 等 - -# 3. 检查提交信息 -git log --oneline -1 - -# 4. 确保 Change-Id 存在 -git log -1 | grep Change-Id -``` - -### **3. 每日工作流程** - -```bash -# 早上 -git fetch origin -git rebase origin/master # 更新本地代码 - -# 开发中 -git add . -git commit -m "..." - -# 推送前 -git pull --rebase origin master # 再次更新 -解决冲突(如果有) -git push origin HEAD:refs/for/master - -# 查看 Gerrit 反馈 -# 根据评审意见修改 -``` - -## **十、常用命令速查** - -```bash -# 初始化 -git clone ssh://user@gerrit:29418/project -scp -p -P 29418 user@gerrit:hooks/commit-msg .git/hooks/ - -# 日常开发 -git checkout -b feature/xxx -git add . -git commit -m "..." -git push origin HEAD:refs/for/master - -# 更新 -git commit --amend -git push origin HEAD:refs/for/master - -# 查看 -git log --oneline -5 -git status -git diff - -# 解决冲突 -git fetch origin -git rebase origin/master -解决冲突 → git add → git rebase --continue -``` - -## **十一、故障排除** - -| 问题 | 解决方案 | -| ------------- | ----------------- | -| 403 Forbidden | 检查 SSH 密钥/HTTP 密码 | -| 缺少 Change-Id | 安装 commit-msg 钩子 | -| 分支不存在 | 先创建分支或确认分支名 | -| 冲突无法推送 | rebase 解决冲突 | -| 权限不足 | 联系管理员添加权限 | -| 推送被拒绝 | 检查目标分支是否正确 | - -## **十二、快速参考卡片** - -``` -✅ 正确流程: -1. git clone -2. 安装 commit-msg 钩子 -3. git checkout -b feature/xxx -4. 开发并提交 -5. git push origin HEAD:refs/for/目标分支 - -✅ 更新流程: -1. git commit --amend # 必须! -2. git push origin HEAD:refs/for/目标分支 - -✅ 关键要点: -• 每次提交都必须有 Change-Id -• 更新必须用 --amend -• 只能推送到 refs/for/ -• 在 Gerrit Web 界面查看结果 -``` - -需要我详细解释哪个部分吗? +# gerrit上传代码详细指南 + +# **Gerrit 代码上传详细指南** + +## **一、Gerrit 工作流程概述** + +``` +开发者 → 本地开发 → 推送代码审查 → Gerrit 评审 → 评审通过 → 合并代码 + ↑ ↓ + └─────────────── 需要修改 ← 评审不通过 ←───────────────┘ +``` + +## **二、环境准备** + +### **1. 安装必要的工具** + +```bash +# 安装 Git +sudo apt-get install git # Ubuntu/Debian +brew install git # macOS + +# 安装 commit-msg 钩子(关键步骤) +curl -Lo .git/hooks/commit-msg http://YOUR_GERRIT:8080/tools/hooks/commit-msg +chmod +x .git/hooks/commit-msg +``` + +### **2. 配置 Git 用户信息** + +```bash +git config --global user.name "你的姓名" +git config --global user.email "你的邮箱@company.com" +git config --global core.autocrlf input # Windows 用户重要! +git config --global core.safecrlf warn +``` + +### **3. 配置 SSH 密钥** + +```bash +# 生成 SSH 密钥 +ssh-keygen -t ed25519 -C "your_email@company.com" + +# 查看公钥 +cat ~/.ssh/id_ed25519.pub + +# 将公钥添加到 Gerrit: Settings → SSH Keys +``` + +## **三、日常开发流程** + +### **1. 克隆项目** + +```bash +# 方式1:通过 SSH(推荐) +git clone ssh://username@gerrit-server:29418/project-name + +# 方式2:通过 HTTP +git clone http://gerrit-server:8080/project-name +``` + +### **2. 创建开发分支** + +```bash +# 从 master 创建功能分支 +git checkout master +git pull origin master +git checkout -b feature/your-feature-name + +# 或者从特定版本创建 +git checkout -b feature/xxx release-1.0 +``` + +### **3. 进行开发** + +```bash +# 修改文件 +git add . +git status # 查看状态 + +# 提交代码(commit-msg 钩子会自动添加 Change-Id) +git commit -m "功能描述 + +详细描述: +1. 做了什么修改 +2. 为什么修改 +3. 测试情况 + +Bug: BUG-12345 # 如果有 Bug 编号 +Feature: FEAT-6789 # 如果有需求编号 + +Change-Id: I自动生成" +``` + +### **4. 推送代码审查** + +```bash +# 标准推送方式(创建/更新代码审查) +git push origin HEAD:refs/for/目标分支 + +# 示例: +git push origin HEAD:refs/for/master # 推送到 master 评审 +git push origin HEAD:refs/for/release-1.0 # 推送到 release 分支评审 +git push origin HEAD:refs/for/feature/xxx # 推送到功能分支评审 +``` + +## **四、推送参数详解** + +### **1. 普通推送** + +```bash +# 创建新的代码审查 +git push origin HEAD:refs/for/master + +# 创建草稿代码审查 +git push origin HEAD:refs/drafts/master +``` + +### **2. 推送并设置评审人** + +```bash +# 推送并添加 Reviewer +git push origin HEAD:refs/for/master%r=reviewer1@company.com,r=reviewer2@company.com + +# 推送并添加 CC +git push origin HEAD:refs/for/master%cc=manager@company.com + +# 推送并设置 Topic +git push origin HEAD:refs/for/master%topic=feature/login +``` + +### **3. 推送选项组合** + +```bash +# 完整示例 +git push origin HEAD:refs/for/master%\ +r=alice@company.com,\ +r=bob@company.com,\ +cc=manager@company.com,\ +topic=feature/login,\ +l=Code-Review+2,\ +l=Verified+1 +``` + +## **五、更新已有的代码审查** + +### **1. 修改后更新** + +```bash +# 修改代码后 +git add . +git commit --amend # 重要:必须使用 --amend 保留 Change-Id + +# 重新推送(会自动更新原有代码审查) +git push origin HEAD:refs/for/master +``` + +### **2. 基于评审意见修改** + +```bash +# 查看评审意见后修改 +git fetch origin refs/changes/XX/YYYY/Z && git checkout FETCH_HEAD +# 或者 +git review -d 12345 # 如果安装了 git-review + +# 修改代码 +git add . +git commit --amend + +# 重新推送 +git push origin HEAD:refs/for/master +``` + +### **3. 创建新的 Patch Set** + +```bash +# 每次 git commit --amend 后推送都会创建新的 Patch Set +git log --oneline -1 # 确认 Change-Id 存在 +git push origin HEAD:refs/for/master +``` + +## **六、解决常见问题** + +### **问题1:缺少 Change-Id** + +```bash +# 安装 commit-msg 钩子 +curl -Lo .git/hooks/commit-msg http://gerrit:8080/tools/hooks/commit-msg +chmod +x .git/hooks/commit-msg + +# 为现有提交添加 Change-Id +git commit --amend --no-edit # 重新提交,钩子会自动添加 + +# 或者手动添加 +git commit --amend -m "原提交信息 + +Change-Id: I旧的ChangeId" # 从 Gerrit 界面复制 +``` + +### **问题2:权限拒绝** + +```bash +# 检查 SSH 配置 +ssh -p 29418 username@gerrit-server + +# 检查公钥是否添加 +cat ~/.ssh/id_ed25519.pub + +# 检查项目权限 +# 联系管理员或查看 Gerrit Web 界面 +``` + +### **问题3:冲突无法推送** + +```bash +# 拉取最新代码 +git fetch origin +git rebase origin/master # 或者 git merge origin/master + +# 解决冲突 +git mergetool # 或手动解决 +git add . +git rebase --continue # 如果使用 rebase + +# 重新推送 +git push origin HEAD:refs/for/master +``` + +### **问题4:错误的分支目标** + +```bash +# 查看当前分支 +git branch -a + +# 查看远程分支 +git branch -r + +# 推送到正确的分支 +git push origin HEAD:refs/for/正确的分支名 +``` + +## **七、高级操作** + +### **1. 提交多个相关修改** + +```bash +# 创建多个提交 +git add file1 +git commit -m "修改1: 功能A" +git add file2 +git commit -m "修改2: 功能B" + +# 推送到同一个 Topic +git push origin HEAD~2:refs/for/master%topic=feature/xxx +``` + +### **2. 依赖链提交** + +```bash +# 第一个提交 +git commit -m "基础修改" + +# 第二个提交依赖第一个 +git commit -m "依赖修改" + +# 推送到 Gerrit 时保持依赖关系 +git push origin HEAD~1:refs/for/master +git push origin HEAD:refs/for/master%depends=第一个提交的Change-Id +``` + +### **3. 使用 git-review 工具** + +```bash +# 安装 +pip install git-review + +# 初始化 +git review -s + +# 提交代码审查 +git review + +# 下载代码审查 +git review -d 12345 # Change-Number +``` + +## **八、Gerrit Web 界面操作** + +### **1. 查看代码审查** + +- 访问:`http://gerrit:8080` +- 登录 → Dashboard → 查看你的代码审查 +- 点击 Change-Number 进入详情 + +### **2. 评审操作** + +- **+1 / -1**:代码风格、建议性意见 +- **+2 / -2**:代码评审通过/拒绝(需要权限) +- **Submit**:合并代码(需要权限) +- **Abandon**:放弃代码审查 +- **Rebase**:重新基于最新代码 +- **Cherry Pick**:应用到其他分支 + +### **3. 查看差异** + +- **Side-by-Side**:并排对比 +- **Unified Diff**:统一差异 +- **Patch Set**:切换不同版本 + +## **九、最佳实践** + +### **1. 提交信息规范** + +``` +一句话摘要(50字以内) + +详细描述: +• 做了什么修改 +• 为什么修改 +• 如何测试 +• 可能的影响 + +Bug: BUG-12345 +Feature: FEAT-6789 +Test: 通过单元测试/集成测试 + +Change-Id: I自动生成 +``` + +### **2. 代码审查前自查** + +```bash +# 1. 运行代码检查 +git diff --check # 检查空白字符 + +# 2. 运行测试 +npm test # 或 mvn test, pytest 等 + +# 3. 检查提交信息 +git log --oneline -1 + +# 4. 确保 Change-Id 存在 +git log -1 | grep Change-Id +``` + +### **3. 每日工作流程** + +```bash +# 早上 +git fetch origin +git rebase origin/master # 更新本地代码 + +# 开发中 +git add . +git commit -m "..." + +# 推送前 +git pull --rebase origin master # 再次更新 +解决冲突(如果有) +git push origin HEAD:refs/for/master + +# 查看 Gerrit 反馈 +# 根据评审意见修改 +``` + +## **十、常用命令速查** + +```bash +# 初始化 +git clone ssh://user@gerrit:29418/project +scp -p -P 29418 user@gerrit:hooks/commit-msg .git/hooks/ + +# 日常开发 +git checkout -b feature/xxx +git add . +git commit -m "..." +git push origin HEAD:refs/for/master + +# 更新 +git commit --amend +git push origin HEAD:refs/for/master + +# 查看 +git log --oneline -5 +git status +git diff + +# 解决冲突 +git fetch origin +git rebase origin/master +解决冲突 → git add → git rebase --continue +``` + +## **十一、故障排除** + +| 问题 | 解决方案 | +| ------------- | ----------------- | +| 403 Forbidden | 检查 SSH 密钥/HTTP 密码 | +| 缺少 Change-Id | 安装 commit-msg 钩子 | +| 分支不存在 | 先创建分支或确认分支名 | +| 冲突无法推送 | rebase 解决冲突 | +| 权限不足 | 联系管理员添加权限 | +| 推送被拒绝 | 检查目标分支是否正确 | + +## **十二、快速参考卡片** + +``` +✅ 正确流程: +1. git clone +2. 安装 commit-msg 钩子 +3. git checkout -b feature/xxx +4. 开发并提交 +5. git push origin HEAD:refs/for/目标分支 + +✅ 更新流程: +1. git commit --amend # 必须! +2. git push origin HEAD:refs/for/目标分支 + +✅ 关键要点: +• 每次提交都必须有 Change-Id +• 更新必须用 --amend +• 只能推送到 refs/for/ +• 在 Gerrit Web 界面查看结果 +``` + +需要我详细解释哪个部分吗? diff --git a/docs/学习笔记/gerrit分支规范.md b/docs/gerrit/gerrit分支规范.md similarity index 100% rename from docs/学习笔记/gerrit分支规范.md rename to docs/gerrit/gerrit分支规范.md diff --git a/docs/gerrit/gerrit提交代码时遇到钩子问题的解决办法.md b/docs/gerrit/gerrit提交代码时遇到钩子问题的解决办法.md new file mode 100644 index 0000000..3508758 --- /dev/null +++ b/docs/gerrit/gerrit提交代码时遇到钩子问题的解决办法.md @@ -0,0 +1,50 @@ +你遇到的问题是在向 Gerrit 代码审核平台推送代码时,因为提交信息(commit message)的末尾缺少 `Change-Id` 标识,导致推送被拒绝了。这是 Gerrit 的强制要求,用于追踪和管理代码评审。 + +### 解决方案 +我会一步步教你解决这个问题,整个过程分为两步:安装 commit-msg 钩子、补全 Change-Id 并重新推送。 + +#### 步骤 1:安装 Gerrit 的 commit-msg 钩子 +这个钩子的作用是在你每次提交代码时,自动在提交信息末尾生成 `Change-Id`。 + +根据你的报错信息,执行对应的命令(二选一即可): + +**方式 1:使用 SSH(推荐)** +```bash +# 获取 git 目录路径并安装钩子 +gitdir=$(git rev-parse --git-dir); scp -p -P 29418 renjianbo@101.43.95.130:hooks/commit-msg ${gitdir}/hooks/ + +# 如果你的 OpenSSH 版本 >= 9.0,需要加 -O 参数 +gitdir=$(git rev-parse --git-dir); scp -O -p -P 29418 renjianbo@101.43.95.130:hooks/commit-msg ${gitdir}/hooks/ +``` + +**方式 2:使用 HTTP/HTTPS** +```bash +# 下载钩子文件并赋予执行权限 +f="$(git rev-parse --git-dir)/hooks/commit-msg"; curl -o "$f" http://101.43.95.130:8082/tools/hooks/commit-msg ; chmod +x "$f" +``` + +#### 步骤 2:为已有提交补充 Change-Id 并重新推送 +钩子安装完成后,需要为刚才失败的提交补充 `Change-Id`: +```bash +# 修正最近一次提交,自动添加 Change-Id(--no-edit 表示不修改提交信息内容) +git commit --amend --no-edit + +# 重新推送代码到 Gerrit +git push origin HEAD:refs/for/master +``` + +#### 验证 +执行完上述命令后,如果没有报错,且终端输出类似以下内容,说明推送成功: +``` +Enumerating objects: xxx, done. +Counting objects: 100% (xxx/xxx), done. +... +remote: Processing changes: new: 1, done +To ssh://101.43.95.130:29418/zhini_im + * [new reference] HEAD -> refs/for/master +``` + +### 总结 +1. **核心原因**:Gerrit 要求所有提交必须包含 `Change-Id` 用于代码评审追踪,你的提交缺少该标识导致推送失败。 +2. **关键操作**:先安装 `commit-msg` 钩子(自动生成 Change-Id),再用 `git commit --amend --no-edit` 补全已有提交的 Change-Id,最后重新推送。 +3. **后续预防**:安装钩子后,后续所有新提交都会自动生成 Change-Id,不会再出现此错误。 \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index c9f001b..2eb179e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -195,6 +195,10 @@ nav: - Obsidian笔记体系/Resources/论文/移动操作系统前沿/README.md - Obsidian笔记体系/Resources/论文/移动操作系统前沿/移动系统安全研究.md - Obsidian笔记体系/Resources/论文/移动操作系统前沿/移动边缘计算研究.md +- gerrit: + - gerrit/gerrit上传代码详细指南.md + - gerrit/gerrit分支规范.md + - gerrit/gerrit提交代码时遇到钩子问题的解决办法.md markdown_extensions: - pymdownx.highlight: