Files
GuJumpgate/开发者AI开发与PR提交流程.md
T

403 lines
14 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.
# 开发者 AI 开发与 PR 流程
请开发者们先让自己的 AI 阅读此文件。
AI 在本仓库里进行开发、整理改动、发起 PR、更新 PR、补充说明时,都必须按本文执行,不能跳步,不能猜,不能自创流程。
本文面向“开发者自己电脑上的 AI”,不是给仓库维护者批量处理别人 PR 用的,也不是版本发布流程。
## 使用前准备
在让 AI 操作 GitHub 之前,开发者本机必须先安装 GitHub CLI,并完成登录。
最低要求:
1. 本机已安装 `git`
2. 本机已安装 GitHub CLI,也就是 `gh`
3. 已完成 GitHub 登录
4. 当前账号对目标仓库至少有读取权限;如果要推分支、改 PR、合并 PR,还需要对应写权限
登录示例:
```powershell
gh auth login
```
如果 AI 检查到 `gh` 不可用,或者 `gh auth status` 显示未登录、登录到错误账号、权限不足,则必须先停止并明确告诉开发者,不准假装已经完成 GitHub 操作。
## 本文适用场景
适用于下面这些任务:
- 开发新功能
- 修复 bug
- 清理陈旧逻辑
- 整理本地提交
- 发起新的 PR
- 更新已有 PR
- 在自己的 PR 下补充说明
- 在权限允许时,把自己的 PR 合并到 `dev`
不适用于:
- 版本发布
- 直接把代码合并到 `master`
- 在没看代码上下文的前提下,靠猜测生成 PR 结论
## 仓库硬性规则
1. 任何结论都不能猜,必须基于真实命令输出、真实 diff、真实代码上下文。
2. 开发基线分支只能是 `dev`。AI 不得以 `master` 作为日常开发起点,也不得把 PR 目标分支设为 `master`
3. 发起 PR 前,必须先同步最新远端提交,确保当前分支已经对齐最新 `origin/dev`
4. 如果发现当前 PR 的目标分支是 `master`AI 必须立刻改为 `dev`,然后重新检查 PR 信息。
5. 如果当前工作区有无法确认归属的脏改动,AI 必须先停下来告诉开发者,不能偷偷带进本次 PR,也不能擅自删除。
6. 开发新功能时,不要为了兼容旧逻辑而保留明显无用的陈旧代码;如果确认无其他代码依赖,应一并清理。
7. 如果旧逻辑本身设计差、实现混乱或者存在 bug,AI 需要继续检查相关调用点;在不影响其他功能的前提下,可以顺手一起修正。
8. 如果改动了 SQL 文件,必须按仓库规则同步本地 MySQL:账号 `root`,密码 `123456`,数据库 `xzs`
9. 默认不编译、不跑测试。开发完成后提醒开发者自行测试。
10. 如果是前端改动且没有新增依赖,只提醒开发者自己测试即可;如果新增了依赖并完成安装,可以自行验证能否启动,验证后要关闭启动占用的端口,并提醒开发者重新启动。
11. PR 标题、PR 正文、PR 评论都用自然中文直接表达,不要写“自动回复”“AI 分析结果如下”这种固定机器人腔。
12. 没有开发者明确授权时,AI 不得擅自合并 PR、关闭 PR、删除远端分支。
13. 必须严格区分“同步 PR 分支”和“合并 PR 到 `dev`”:
- `git merge origin/dev``git rebase origin/dev`、把最新 `dev` 推回 PR 源分支,只是让 PR 分支吸收最新基线,不等于合并 PR。
- 只有通过 GitHub PR 合并动作,例如 `gh pr merge <PR_NUMBER> --merge`,并确认 `origin/dev` 已前进到合并提交,才算“合并到 `dev`”。
14. 如果开发者明确说“合并进 dev”“合到 dev”“通过就合”“没问题就合并”“处理完直接合并”这类表达,AI 必须执行阶段 8 的真实 PR 合并流程;不能只更新 PR 分支后声称已经合并。
## 开发者需要提供给 AI 的信息
至少提供下面这些内容:
- 仓库本地路径
- 本次要做的功能或问题描述
- 是新任务,还是继续一个已有分支/已有 PR
- 如果已经有 PR,要提供 PR 编号
- 是否允许 AI 在自己的功能分支上执行 `rebase`
- 是否允许 AI 在最后直接发起 PR
- 如果 PR 已经审完,是否允许 AI 直接合并到 `dev`
如果这些关键信息缺失,AI 不能靠猜来补。
## 标准执行顺序
### 阶段 1:环境确认与仓库现状检查
AI 开始干活前,先执行下面这些动作:
```powershell
gh --version
gh auth status
git status --short --branch
git remote -v
git branch --show-current
git fetch origin
```
要求:
1. 必须先确认 `gh` 可用且已登录。
2. 必须确认当前仓库远端是正确仓库。
3. 必须确认当前工作区是否有未提交改动。
4. 不能在没看当前分支状态的情况下直接开始写代码或直接发 PR。
### 阶段 2:先对齐最新 `dev`
#### 场景 A:这是一个新任务
如果是新任务,还没开始写代码,则必须先同步最新 `dev`
```powershell
git switch dev
git pull --ff-only origin dev
git switch -c <feature-branch>
```
规则:
1. 新任务必须从最新 `dev` 拉出功能分支。
2. 不允许直接在 `dev` 上开发。
3. 不允许从 `master` 拉开发分支。
#### 场景 B:这是一个已有分支上的继续开发
如果开发已经在某个功能分支上进行,则不能为了同步 `dev` 直接丢本地改动。
这时至少要先执行:
```powershell
git fetch origin
git rev-list --left-right --count origin/dev...HEAD
git log --oneline HEAD..origin/dev
```
要求:
1. 必须真实判断当前分支是否已经落后于 `origin/dev`
2. 如果当前分支落后,先继续开发可以,但在发起 PR 前必须补齐最新 `dev`
3. 如果当前分支已经出现复杂冲突风险,AI 需要提前告诉开发者,不要拖到最后一刻再爆。
### 阶段 3:开发与本地整理
AI 开发时,必须遵守下面这些要求:
1. 先读相关代码上下文,再改代码。
2. 不能只改表面调用点,必须检查相关联的状态流、配置项、消息流、页面流程、回调流程。
3. 如果发现本次功能附近本来就有坏逻辑,而且修复不会影响其他已使用代码,可以顺手一并修正。
4. 如果为了完成新功能必须删除旧逻辑,就删除,不要为了“看起来兼容”堆陈旧代码。
5. 改完后必须自己检查:
- `git diff --stat`
- `git diff`
- 相关文件中是否残留冲突标记
- 是否混入无关改动
6. 如果改了 SQL,别忘了同步本地 MySQL `xzs`
### 阶段 4:发起 PR 前必须再次同步最新 `dev`
这是硬规则。
无论这个分支什么时候开始开发,只要准备发起 PR,就必须再次拉取远端最新提交,并确认当前分支已经吸收了最新 `origin/dev`
先执行:
```powershell
git fetch origin
git log --oneline HEAD..origin/dev
```
#### 如果 `origin/dev` 没有新提交
可以继续进入下一阶段。
#### 如果 `origin/dev` 有新提交
优先处理方式:
```powershell
git rebase origin/dev
```
如果开发者明确禁止改写当前分支历史,或者这个分支已经有多人共同使用,再改用:
```powershell
git merge origin/dev
```
处理规则:
1. 如果执行了 `rebase`,必须重新检查 diff,确认没有把逻辑改坏。
2. 如果执行了 `rebase` 且当前分支之前已经推到远端,后续推送时只能使用:
```powershell
git push --force-with-lease origin <feature-branch>
```
3. 不允许使用 `git push --force`
4. 不能只把冲突标记删掉就算完,必须继续检查冲突两边的真实逻辑是否仍然一致。
### 阶段 5:提交与推送
在发起 PR 前,AI 必须先把本次改动整理干净。
至少要执行下面这些检查:
```powershell
git status --short
git diff --stat origin/dev...HEAD
git diff origin/dev...HEAD
```
要求:
1. PR 中只能包含与本次任务相关的改动。
2. 不要把临时调试代码、无关格式化、无关文件重命名、构建产物一起带进 PR。
3. 提交信息必须描述真实功能结果,不要写:
- `update`
- `fix bug`
- `merge branch`
- `修改一下`
4. 推送前要确认当前分支不是 `dev`,也不是 `master`
推送示例:
```powershell
git push -u origin <feature-branch>
```
### 阶段 6:创建或更新 PR
PR 只能指向 `dev`
创建 PR 时使用:
```powershell
gh pr create --base dev --head <feature-branch> --title "<PR标题>" --body-file <PR正文文件>
```
如果 PR 已经存在,则执行:
```powershell
gh pr view <PR_NUMBER> --json number,title,baseRefName,headRefName,state,isDraft,url
```
如果发现已有 PR 的目标分支不是 `dev`,必须改正:
```powershell
gh pr edit <PR_NUMBER> --base dev
```
改完后,再重新读取一次 PR 信息,确认:
- `baseRefName = dev`
- PR 仍是 open
- head 分支正确
#### PR 标题要求
1. 直接描述功能结果或修复结果。
2. 不要把标题写成 Git 动作描述。
3. 不要写空洞标题。
#### PR 正文要求
PR 正文直接写真实信息,建议结构如下:
```markdown
## 本次改动
- ...
## 风险与影响
- ...
## 测试情况
- 未运行测试,请开发者自行验证
```
说明:
1. 正文必须基于真实改动来写。
2. 不要写固定“自动回复”抬头。
3. 不要写和代码不相符的夸大表述。
### 阶段 7PR 后续补充说明
如果 AI 需要在 PR 里补充评论、解释冲突、说明待确认点,要求如下:
1. 直接写清楚问题、原因、影响、建议。
2. 语气自然、简洁、可读。
3. 不要使用固定机器人模板。
4. 不要为了“像 AI”而加免责声明废话。
5. 评论内容必须和真实代码、真实 diff、真实冲突一致。
### 阶段 8:只有在明确授权时,才允许合并 PR
如果开发者明确要求 AI 继续合并自己的 PR,则必须先再次确认:
```powershell
gh pr view <PR_NUMBER> --json number,title,baseRefName,headRefName,state,isDraft,mergeable,mergeStateStatus,url
git fetch origin
git log --oneline HEAD..origin/dev
```
合并前必须满足:
1. PR 目标分支是 `dev`
2. PR 不是 draft
3. PR 仍然是 open
4. 当前分支已经吸收了最新 `origin/dev`
5. 没有尚未处理的明确问题
6. 开发者已经明确授权合并
如果满足以上条件,才可以执行 GitHub 合并,例如:
```powershell
gh pr merge <PR_NUMBER> --merge --delete-branch
```
注意:
1. 这一步才是“把 PR 合并到 `dev`”。把 `origin/dev` 合并到功能分支、把功能分支推回 PR、让 PR 变成可合并,都不算已经合并到 `dev`
2. 如果不打算删除 PR 源分支,可以去掉 `--delete-branch`,但仍然必须执行 `gh pr merge`
3. `gh pr merge` 成功后,必须立刻验证 PR 和本地 `dev`
```powershell
gh pr view <PR_NUMBER> --json number,state,mergedAt,mergedBy,baseRefName,url,mergeCommit
git fetch origin
git switch dev
git pull --ff-only origin dev
git rev-parse HEAD origin/dev
git log --oneline -1
```
验证要求:
1. `state` 必须是 `MERGED`
2. `baseRefName` 必须是 `dev`
3. `mergeCommit.oid` 必须存在。
4. `git rev-parse HEAD origin/dev` 输出的两个提交必须一致。
5. 本地 `dev` 的最新提交必须是该 PR 的合并提交,或包含该 PR 合并结果的后续 `dev` 提交。
6. 如果本地有无关脏改动导致不能切回或快进 `dev`,必须明确告诉开发者“远端 PR 已合并,但本地 `dev` 尚未更新”,不能说本地也已经完成。
限制:
1. AI 只能把自己的 PR 合并到 `dev`
2. AI 不得把任何开发分支直接合并到 `master`
3. 如果发现 PR 目标分支是 `master`,先改成 `dev`,再重新核对是否允许继续。
## 开发清单
开发时按下面清单自检,避免漏项:
### 第 1 阶段:开始前
- `gh` 已安装且已登录
- 当前仓库正确
- 当前工作区状态已确认
- 已明确本次任务是否是新任务还是续做
### 第 2 阶段:开发前基线
- 新任务已从最新 `dev` 拉分支
- 续做任务已确认自己相对 `origin/dev` 的落后情况
- 没有误在 `master``dev` 上直接开发
### 第 3 阶段:开发中
- 代码上下文已阅读
- 相关联逻辑已检查
- 无用旧代码已清理
- SQL 改动已同步本地数据库
### 第 4 阶段:发 PR 前
- 已再次获取最新 `origin/dev`
- 已完成 `rebase``merge`
- diff 只包含本次任务改动
- 提交信息清晰
- 当前分支不是 `dev` / `master`
### 第 5 阶段:PR 与收尾
- PR 目标分支确认是 `dev`
- PR 标题和正文与真实改动一致
- 如有评论,内容为自然中文,不用固定机器人模板
- 如果未跑测试,已明确提醒开发者测试
- 如果开发者授权合并,已确认 PR 状态为 `MERGED`,且本地 `dev``origin/dev` 指向同一提交
## 最终反馈给开发者时必须说明
AI 完成后,至少要向开发者明确反馈下面这些信息:
1. 实际执行了哪些命令和动作
2. 当前分支是否已经同步最新 `origin/dev`
3. 是否创建了新 PR,或者更新了已有 PR
4. PR 编号和链接是什么
5. PR 目标分支是否确认是 `dev`
6. 是否执行了 `rebase``merge`
7. 是否改了 SQL 并同步了本地数据库
8. 是否运行过测试;如果没跑,要明确提醒开发者自行测试
9. 是否已经合并;如果已合并,要明确说明是合并到 `dev`
10. 如果已合并,必须说明 PR 状态是否为 `MERGED`、合并提交是什么、本地 `dev``origin/dev` 是否已经一致
## 一句话执行要求
AI 在本仓库里做开发与提 PR 时,必须按“先确认环境与当前工作区,再对齐最新 `dev`,再开发与整理改动,再次同步最新 `dev`,最后只向 `dev` 发起或更新 PR;只有在开发者明确授权时,才允许把自己的 PR 合并到 `dev`”的顺序执行,不能跳步,不能猜,不能偷懒。