Files
opencode/skill/git/commit-workflow.md

164 lines
3.7 KiB
Markdown
Raw Permalink 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.
# Git Commit Workflow
提交暂存文件,自动生成提交信息并创建版本标签的完整工作流。
## 概述
此工作流用于:
- 自动分析暂存区变更
- 根据 Conventional Commits 规范生成提交信息
- 检测项目类型并更新版本号
- 创建语义化版本标签
## 执行步骤
### 步骤 1: 检查暂存区
```bash
git diff --cached --name-only
```
- 如果暂存区为空,通知用户并停止
- 如果有文件,继续下一步
### 步骤 2: 收集信息(并行执行)
```bash
# 并行执行以下命令
git status
git diff --cached
git log --oneline -10
git tag --list | sort -V | tail -5
```
同时检查 `AGENTS.md` 文件获取:
- 仓库类型polyrepo/monorepo
- 版本规则
- 项目结构信息
### 步骤 3: 检测仓库类型
**Polyrepo单仓库**
- Tag 格式:`<version>`(如 `1.2.0`
**Monorepo多项目**
- Tag 格式:`<subproject>-<version>`(如 `ios-1.2.0`
- 检测特征:`packages/``apps/``services/` 目录
### 步骤 4: 检测项目类型和版本
| 项目类型 | 版本文件 | 版本字段 |
|---------|---------|---------|
| iOS | `*.xcodeproj/project.pbxproj` | `MARKETING_VERSION` |
| Node.js | `package.json` | `version` |
| Android (Groovy) | `app/build.gradle` | `versionName` |
| Android (Kotlin) | `app/build.gradle.kts` | `versionName` |
| Go | Git tag only | - |
| Python | `pyproject.toml` / `setup.py` | `version` |
| Rust | `Cargo.toml` | `version` |
### 步骤 5: 生成提交信息
遵循 Conventional Commits 格式:
```
<type>(<scope>): <subject>
```
**提交类型**
| Type | 描述 | 版本影响 |
|------|------|---------|
| `feat` | 新功能 | minor +1 |
| `fix` | Bug 修复 | patch +1 |
| `perf` | 性能优化 | patch +1 |
| `BREAKING CHANGE` | 破坏性变更 | major +1 |
| `docs` | 文档更新 | 无 |
| `style` | 代码格式 | 无 |
| `refactor` | 重构 | 无 |
| `test` | 测试 | 无 |
| `chore` | 维护任务 | 无 |
| `ci` | CI/CD 变更 | 无 |
| `build` | 构建配置 | 无 |
**提交语言**
- macOS/Linux使用中文
- Windows使用英文避免编码问题
**Monorepo Scope**
- 单项目变更:`feat(ios): 添加上传功能`
- 多项目变更:`chore: 更新共享依赖`
### 步骤 6: 确定新版本号
根据提交类型计算新版本:
**版本递增规则**
- `feat`minor +1`1.2.0``1.3.0`
- `fix`/`perf`patch +1`1.2.3``1.2.4`
- Breaking changemajor +1`1.2.3``2.0.0`
**不更新版本**
- `docs``test``refactor``style``build``ci``chore`
### 步骤 7: 更新版本文件并暂存
如果需要更新版本(步骤 6 确定了新版本号):
1. **更新版本文件**:将版本号写入对应的版本文件
2. **添加到暂存区**
```bash
git add <version-file>
```
3. **验证暂存**
```bash
git diff --cached --name-only
```
确认版本文件已在暂存区
### 步骤 8: 执行提交
```bash
git commit -m "<commit-message>"
```
### 步骤 9: 创建版本标签
仅在版本更新时创建(除非用户指定 "skip tag"
**Polyrepo**
```bash
git tag -a "1.2.0" -m "<commit-message>"
```
**Monorepo**
```bash
git tag -a "ios-1.2.0" -m "<commit-message>"
```
## 选项
- `skip tag` / `skip`:跳过标签创建
## 输出格式
```
✓ 提交成功
提交信息:[commit message]
版本标签:[tag](如果创建了)
要推送到远程仓库,请运行:/git-push
```
## 注意事项
- 此命令**不会推送**到远程,使用 `/git-push` 推送
- 暂存区为空时会提示用户先 `git add`
- 标签注释使用与提交相同的消息内容
## 相关文档
- [Git Workflow Best Practices](./SKILL.md)
- [Push Workflow](./push-workflow.md)