From cfffc8e4ef5c2401860645329198cc911085dbde Mon Sep 17 00:00:00 2001 From: JOJO <1498581755@qq.com> Date: Mon, 27 Apr 2026 23:58:59 +0800 Subject: [PATCH] =?UTF-8?q?docs(agents):=20simplify=20git=20workflow=20?= =?UTF-8?q?=E2=80=94=20remove=20PR=20and=20review?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 156 ++++++++++-------------------------------------------- 1 file changed, 29 insertions(+), 127 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 9776877..e0dd539 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -69,16 +69,14 @@ ### 6.1 核心原则 -- **永远不直接在 `main` 上提交**。所有改动必须走功能分支。 -- 每个功能分支合入 main 时使用 **Squash Merge**,保持 main 历史干净(一个功能 = 一个 commit)。 +- **永远不直接在 `main` 上开发**。所有改动走功能分支,合入时 Squash Merge。 +- 每个功能分支合入 main 后,main 上对应一个 commit(一个功能 = 一个 commit),历史干净可回滚。 - 使用 **Conventional Commits**:`feat:` `fix:` `refactor:` `chore:` `docs:` `test:` `perf:`。 -- 本仓库托管于 **Gitea**(`git.cyjai.com`),CLI 工具为 **`tea`**。 +- 个人项目,不设 PR 和 Review 流程。功能分支 = 隔离容器,写完即合。 -### 6.2 场景一:当对话目的是「修改源代码」 +### 6.2 工作流(唯一步骤) -AI 执行前应确保 `tea` CLI 已安装并认证(详见 6.5 节),运行 `tea whoami` 检查。 - -AI 必须按以下流程引导用户(每一步都要向用户说明当前在做什么): +AI 执行以下流程时,每一步都要向用户说明在做什么: ``` 0. 检查工作区状态 @@ -91,139 +89,43 @@ AI 必须按以下流程引导用户(每一步都要向用户说明当前在 git checkout main && git pull origin main git checkout -b feature/<简短描述> main -2. 完成修改后,提交 +2. 开发并提交 git add <修改的文件> git commit -m "feat(scope): 简短描述" + (多轮迭代可用 git commit --amend 保持一个 commit) - 如有多个逻辑独立的改动,拆成多个 commit - 如只有一个功能,一个 commit 即可 - -3. 推送到远程 +3. 推送到远程(备份 + 方便切设备) git push origin feature/<分支名> -4. 创建 Pull Request(用 tea CLI,不碰网页) - tea pulls create \ - --base main \ - --head feature/<分支名> \ - --title "feat(scope): 简短描述" \ - --description "## 改动说明 - - 改了哪些文件 - - 为什么改 - - 如何验证 - - 风险/回滚点" +4. Squash Merge 到 main + git checkout main && git pull origin main + git merge --squash feature/<分支名> + git commit -m "feat(scope): 简短描述" + git push origin main -5. 告知用户 PR 编号,提示用户: - "可以开一个新对话让我 review 这个 PR" +5. 清理 + git branch -D feature/<分支名> + git push origin --delete feature/<分支名> ``` **重要约束**: -- AI 必须先在本地验证修改能正常运行,再建议用户提交。 -- 修改完成后 AI 应主动告知:修改了哪些文件、核心变更点、验证结果。 -- 禁止 AI 在未经用户确认的情况下执行 `git push` 或 `tea pulls merge`。 +- AI 必须在本地验证修改能正常运行,再建议用户提交。 +- 修改完成后主动告知:修改了哪些文件、核心变更点、验证结果。 +- 禁止 AI 在未经用户确认的情况下执行 `git push`。 +- 如需 Review,在同一对话内直接 `git diff main...feature/<分支>` 即可,不必跨对话。 -### 6.3 场景二:当对话目的是「Review 代码」 - -用户会在对话中说「帮我 review PR #N」或「review 最新提交」。AI 按以下流程操作: - -``` -1. 确保本地代码最新 - git fetch origin - git checkout main && git pull origin main - -2. 获取待 review 的改动 - 方式 A(PR review): - tea pulls checkout - 方式 B(本地 review,如用户刚提交未创建 PR): - git diff main...feature/<分支名> - -3. 逐文件审查,关注以下维度: - ✅ 逻辑正确性:边界条件、错误处理、空值检查 - ✅ 安全性:SQL 注入、XSS、密钥泄露、权限校验 - ✅ 性能:不必要的循环、N+1 查询、大对象拷贝 - ✅ 代码风格:命名规范、函数长度、注释质量 - ✅ 测试覆盖:是否有对应测试、测试是否通过 - ✅ 架构一致性:是否符合第 4-5 节的代码约定 - -4. 输出 Review Report,格式如下: - ### 📋 Review Report — PR #N - | 文件 | 严重程度 | 问题 | 建议 | - |------|---------|------|------| - | xxx.py | 🔴 严重 | ... | ... | - | yyy.ts | 🟡 建议 | ... | ... | - | zzz.py | 🟢 良好 | — | — | - - **总结**:[通过 / 需修改 / 建议重构] - 如需修改,逐条给出可操作的具体建议。 - -5. 输出 Review Report 后,**等待用户确认**再操作 PR。 - 用户确认后执行: - - 通过:`tea pulls approve ` - - 需修改:`tea pulls reject ` 并在评论中逐条说明 - - 添加评论:`tea comment ` - 注意:approve/reject 与 merge 一样,都须经用户确认(与 6.2 约束一致)。 - -6. Review 通过后,指导用户合并: - tea pulls merge --style squash - -7. Review 完成后清理 `tea pulls checkout` 创建的临时分支: - git checkout main - git branch -D pr- # 强制删除(本地临时分支无需保留) -``` - -### 6.4 合并后的清理 - -合并完成后 AI 应提醒用户执行: - -```bash -git checkout main && git pull origin main -git branch -D feature/<分支名> # 强制删除(Squash Merge 不产生 merge commit,Git 会提示 not fully merged) -git push origin --delete feature/<分支名> # 删除远程分支(可选) -``` - -### 6.5 `tea` CLI 安装与认证(首次使用) - -```bash -# 安装 -brew install tea - -# 认证(在 git.cyjai.com → 设置 → 应用 → 生成令牌) -tea login add \ - --name gitea \ - --url https://git.cyjai.com \ - --token <你的令牌> -``` - -### 6.6 常见命令速查 +### 6.3 常用命令速查 | 操作 | 命令 | |------|------| -| 列出 PR | `tea pulls list` | -| 查看 PR 详情(含评论) | `tea pulls --comments <编号>` | -| 查看 PR Review 评论 | `tea pulls review-comments <编号>` | -| 创建 PR | `tea pulls create --base main --head <分支> --title "..."` | -| 查看 PR diff | `tea pulls checkout <编号>` 后 `git diff main...<分支>` | -| 查看 PR mergeable 状态 | `tea api "/repos///pulls/<编号>"` | -| Approve | `tea pulls approve <编号>` | -| Request Changes | `tea pulls reject <编号>` | -| 添加评论 | `tea comment <编号>` | -| Squash 合并 | `tea pulls merge <编号> --style squash` | -| 关闭 PR | `tea pulls close <编号>` | -| 查看分支保护 | `tea branches list` | -| 保护分支 | `tea branches protect main` | -| 取消保护 | `tea branches unprotect main` | -| 修改保护规则 | `tea api -X PATCH "/repos///branch_protections/main" --data '{"required_approvals":0}'` | -| 删除远程分支 | `git push origin --delete <分支名>` | -| 强制删除本地分支 | `git branch -D <分支名>` | - -### 6.7 故障排查(实战验证) - -| 症状 | 原因 | 解决 | -|------|------|------| -| `tea pulls merge` 报 `mergeable: False` | Gitea 缓存了旧的保护规则评估结果 | 先用 `tea api "/repos///pulls/<编号>"` 确认 `mergeable` 字段;若规则已修改但 PR 仍不可合并,可 `tea branches unprotect main` → `git push origin main` → `tea branches protect main` 绕过 | -| `git branch -d` 提示 `not fully merged` | Squash Merge 不会在本地产生 merge commit,Git 检测不到合并关系 | 用 `git branch -D` 强制删除 | -| PR 需要 approval 才能合并但你是唯一开发者 | Gitea 默认 `required_approvals=1` 且作者不能自 approve | `tea api -X PATCH "/repos///branch_protections/main" --data '{"required_approvals":0}'` | -| `git push origin main` 被拒绝 | 分支保护 `enable_push: false` 生效 | 正常——不应直接 push main。合并必须通过 `tea pulls merge` 或临时 unprotect(仅紧急情况) | -| `tea whoami` 报 `no available login` | `tea` 和 `git` 认证独立,git SSH 通了不代表 tea API 认证也通了 | 参照 6.5 节用 Token 完成 `tea login add` | +| 切功能分支 | `git checkout -b feature/<名称> main` | +| 暂存未完成工作 | `git stash push -m "WIP: xxx"` | +| 修改最近 commit | `git commit --amend` | +| Squash Merge | `git merge --squash feature/<名称>` | +| 强制删除本地分支 | `git branch -D feature/<名称>` | +| 删除远程分支 | `git push origin --delete feature/<名称>` | +| 同对话内 Review diff | `git diff main...feature/<名称>` | +| 查看提交历史 | `git log --oneline -10` | ## 7) 安全与仓库卫生