mirror of
https://github.com/Lydanne/spaceflow.git
synced 2026-03-12 04:02:45 +08:00
chore: 初始化仓库
This commit is contained in:
145
docs/guide/commands/commit.md
Normal file
145
docs/guide/commands/commit.md
Normal file
@@ -0,0 +1,145 @@
|
||||
# commit — 智能提交
|
||||
|
||||
基于 AI 自动生成符合 [Conventional Commits](https://www.conventionalcommits.org/) 规范的 commit message,并执行 `git commit`。
|
||||
|
||||
## 基本用法
|
||||
|
||||
```bash
|
||||
# 自动生成 commit message 并提交
|
||||
spaceflow commit
|
||||
|
||||
# 试运行,仅生成不提交
|
||||
spaceflow commit --dry-run
|
||||
|
||||
# 智能拆分提交(按模块/功能自动拆分为多个 commit)
|
||||
spaceflow commit --split
|
||||
|
||||
# 跳过 git hooks
|
||||
spaceflow commit --no-verify
|
||||
```
|
||||
|
||||
## 工作流程
|
||||
|
||||
### 普通模式
|
||||
|
||||
1. **检查暂存区** — 确认有 `git add` 过的文件
|
||||
2. **获取上下文** — 读取暂存文件列表、diff、所属包信息、最近 commit 历史
|
||||
3. **构建 Prompt** — 将上下文和 Conventional Commits 类型规范发送给 LLM
|
||||
4. **解析响应** — 从 AI 响应中提取 `type`、`scope`、`subject`、`body`
|
||||
5. **执行提交** — 格式化为 `type(scope): subject` 并执行 `git commit`
|
||||
|
||||
### Split 模式(`--split`)
|
||||
|
||||
1. **收集文件** — 获取暂存区或工作区的所有变更文件
|
||||
2. **分组策略** — 根据配置的 scope 策略对文件分组:
|
||||
- `package` — 按 `package.json` 所属包分组(默认)
|
||||
- `rules` — 按自定义 glob 规则分组
|
||||
- `rules-first` — 优先规则匹配,未匹配的按包分组
|
||||
3. **AI 分析** — 单组时让 AI 进一步分析是否需要拆分
|
||||
4. **并行生成** — 并行为每个组生成 commit message
|
||||
5. **顺序提交** — 子包优先、根目录最后,逐个 `git add` + `git commit`
|
||||
|
||||
## Scope 自动推断
|
||||
|
||||
Spaceflow 会自动根据文件所属的 `package.json` 推断 scope:
|
||||
|
||||
```text
|
||||
cli/src/commands/build/build.service.ts → scope: cli
|
||||
core/src/shared/logger/logger.ts → scope: core
|
||||
commands/review/src/review.service.ts → scope: review
|
||||
package.json → scope: (空,根目录)
|
||||
```
|
||||
|
||||
## Commit 类型
|
||||
|
||||
类型列表从 `spaceflow.json` 的 `publish.changelog.preset.type` 读取,默认值:
|
||||
|
||||
| 类型 | 含义 |
|
||||
|------|------|
|
||||
| `feat` | 新特性 |
|
||||
| `fix` | 修复 BUG |
|
||||
| `perf` | 性能优化 |
|
||||
| `refactor` | 代码重构 |
|
||||
| `docs` | 文档更新 |
|
||||
| `style` | 代码格式 |
|
||||
| `test` | 测试用例 |
|
||||
| `chore` | 其他修改 |
|
||||
|
||||
## Scope 配置
|
||||
|
||||
在 `spaceflow.json` 中配置 `commit` 字段自定义 scope 策略:
|
||||
|
||||
```json
|
||||
{
|
||||
"commit": {
|
||||
"strategy": "rules-first",
|
||||
"rules": [
|
||||
{ "pattern": "docs/**", "scope": "docs" },
|
||||
{ "pattern": ".github/**", "scope": "ci" },
|
||||
{ "pattern": "*.config.*", "scope": "config" }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 策略说明
|
||||
|
||||
| 策略 | 说明 |
|
||||
|------|------|
|
||||
| `package` | 按 `package.json` 所属包推断 scope(默认) |
|
||||
| `rules` | 仅使用自定义 glob 规则匹配 |
|
||||
| `rules-first` | 优先规则匹配,未匹配的回退到包推断 |
|
||||
|
||||
## 命令行选项
|
||||
|
||||
| 选项 | 简写 | 说明 |
|
||||
|------|------|------|
|
||||
| `--dry-run` | `-d` | 试运行,仅生成 message 不提交 |
|
||||
| `--split` | `-s` | 智能拆分为多个 commit |
|
||||
| `--no-verify` | `-n` | 跳过 git hooks |
|
||||
| `--verbose` | `-v` | 详细日志(`-v` 基本,`-vv` 详细) |
|
||||
|
||||
## 示例
|
||||
|
||||
```bash
|
||||
# 普通提交
|
||||
git add .
|
||||
spaceflow commit
|
||||
|
||||
# 预览生成的 message
|
||||
git add .
|
||||
spaceflow commit --dry-run
|
||||
|
||||
# 智能拆分(自动 git add 工作区文件)
|
||||
spaceflow commit --split
|
||||
|
||||
# 拆分 + 预览
|
||||
spaceflow commit --split --dry-run
|
||||
|
||||
# 详细日志查看 AI 交互过程
|
||||
spaceflow commit -vv
|
||||
```
|
||||
|
||||
## 输出示例
|
||||
|
||||
### 普通模式
|
||||
|
||||
```text
|
||||
正在生成 commit message...
|
||||
──────────────────────────────────────────────────
|
||||
feat(core): 添加 Logger 模块支持 TUI 和 Plain 两种渲染模式
|
||||
──────────────────────────────────────────────────
|
||||
提交成功
|
||||
```
|
||||
|
||||
### Split 模式
|
||||
|
||||
```text
|
||||
按包目录分组策略分组...
|
||||
检测到 3 个分组
|
||||
并行生成 3 个 commit message...
|
||||
✅ Commit 1: feat(core): 添加 Logger 模块
|
||||
✅ Commit 2: feat(cli): 集成 Logger 到 build 命令
|
||||
✅ Commit 3: docs: 更新 Logger 文档
|
||||
分批提交完成,共 3 个 commit
|
||||
```
|
||||
Reference in New Issue
Block a user