贡献指南
感谢你考虑为 git-workflow 做出贡献!本指南将帮助你了解如何参与项目开发。
行为准则
我们致力于为所有人提供友好、安全和包容的环境。参与本项目即表示你同意遵守以下准则:
- 使用友好和包容的语言
- 尊重不同的观点和经验
- 优雅地接受建设性批评
- 关注对社区最有利的事情
- 对其他社区成员表示同理心
如何贡献
报告 Bug
如果你发现了 bug,请:
- 检查 Issues 确认问题未被报告
- 创建新 Issue,包含:
- 清晰的标题和描述
- 重现步骤
- 预期行为和实际行为
- 环境信息(OS、Node.js 版本等)
- 相关的错误信息或截图
Bug 报告模板:
markdown
## 问题描述
简要描述遇到的问题
## 重现步骤
1. 运行命令 `gw xxx`
2. 选择选项 xxx
3. 看到错误 xxx
## 预期行为
应该显示 xxx
## 实际行为
显示了 xxx 错误
## 环境信息
- OS: macOS 14.0
- Node.js: v20.0.0
- git-workflow: v0.4.0
## 错误信息错误堆栈或截图
提出新功能
如果你有新功能的想法:
- 先创建 Issue 讨论功能的必要性和设计
- 等待维护者反馈
- 获得批准后再开始开发
功能请求模板:
markdown
## 功能描述
简要描述想要的功能
## 使用场景
为什么需要这个功能?它解决什么问题?
## 建议的实现
如何实现这个功能?
## 替代方案
是否考虑过其他方案?提交代码
1. Fork 仓库
点击 GitHub 页面右上角的 "Fork" 按钮。
2. 克隆你的 Fork
bash
git clone https://github.com/YOUR_USERNAME/git-workflow.git
cd git-workflow3. 添加上游仓库
bash
git remote add upstream https://github.com/iamzjt-front-end/git-workflow.git4. 创建分支
bash
# 使用 gw 创建规范分支
gw f
# 输入 Story ID(可选)和描述
# 或手动创建
git checkout -b feature/20260116-PROJ-123-your-feature5. 开发功能
- 编写代码
- 添加测试
- 更新文档
- 确保代码通过 lint 和测试
bash
# 运行测试
npm test
# 检查类型
npm run build6. 提交代码
使用规范的提交信息:
bash
# 使用 gw 提交(推荐)
gw c
# 或手动提交
git add .
git commit -m "feat: add new feature"提交信息格式:
<type>(<scope>): <subject>
<body>
<footer>类型(type):
feat: 新功能fix: 修复 bugdocs: 文档更新style: 代码格式(不影响功能)refactor: 重构test: 测试相关chore: 构建/工具相关perf: 性能优化
示例:
feat(commit): 添加 AI 提交消息生成功能
- 集成 OpenAI API
- 支持自定义提示词
- 添加错误处理
Closes #1237. 推送到你的 Fork
bash
git push origin feature/20260116-PROJ-123-your-feature8. 创建 Pull Request
- 访问你的 Fork 页面
- 点击 "New Pull Request"
- 填写 PR 描述:
- 说明改动内容
- 关联相关 Issue
- 添加截图(如果适用)
- 等待 review
PR 模板:
markdown
## 改动说明
简要描述这个 PR 做了什么
## 关联 Issue
Closes #123
## 改动类型
- [ ] Bug 修复
- [ ] 新功能
- [ ] 文档更新
- [ ] 代码重构
- [ ] 性能优化
- [ ] 测试相关
## 测试
- [ ] 添加了新的测试
- [ ] 所有测试通过
- [ ] 手动测试通过
## 截图(如果适用)
添加截图展示改动效果
## Checklist
- [ ] 代码遵循项目规范
- [ ] 添加了必要的测试
- [ ] 更新了相关文档
- [ ] 提交信息符合规范开发规范
代码风格
- 使用 TypeScript 严格模式
- 遵循 ESLint 规则
- 使用 2 空格缩进
- 使用单引号
- 添加必要的注释
命名规范
typescript
// 文件名:kebab-case
// ai-service.ts, commit-format.ts
// 函数名:camelCase
function getBranchName() {}
async function generateCommitMessage() {}
// 类型/接口:PascalCase
interface CommitConfig {}
type BranchType = "feature" | "hotfix";
// 常量:UPPER_SNAKE_CASE
const DEFAULT_CONFIG = {};
const MAX_RETRIES = 3;
// 私有函数:以 _ 开头
function _internalHelper() {}函数设计
typescript
// ✅ 好的函数设计
/**
* 生成规范的分支名
* @param type - 分支类型
* @param storyId - Story ID(可选)
* @param description - 分支描述
* @returns 格式化的分支名
*/
function generateBranchName(
type: BranchType,
storyId: string,
description: string
): string {
// 实现
}
// ❌ 不好的函数设计
function doStuff(a: any, b: any): any {
// 实现
}错误处理
typescript
// ✅ 好的错误处理
try {
const result = await apiCall();
return result;
} catch (error) {
if (error instanceof NetworkError) {
console.error("网络错误:", error.message);
} else {
console.error("未知错误:", error);
}
throw error;
}
// ❌ 不好的错误处理
try {
const result = await apiCall();
return result;
} catch (error) {
// 忽略错误
}测试要求
每个新功能都必须包含测试:
typescript
describe("新功能", () => {
it("应该正确处理正常情况", () => {
// 测试正常流程
});
it("应该处理边界情况", () => {
// 测试边界条件
});
it("应该处理错误情况", () => {
// 测试错误处理
});
});文档要求
- 为新功能添加文档
- 更新 README(如果需要)
- 添加代码注释
- 更新 CHANGELOG
Review 流程
提交 PR 后
- 自动运行 CI 测试
- 维护者 review 代码
- 根据反馈修改代码
- 再次 review
- 合并到 main 分支
Review 标准
代码会从以下方面进行 review:
- ✅ 功能是否正确实现
- ✅ 代码质量和可读性
- ✅ 测试覆盖率
- ✅ 文档完整性
- ✅ 性能影响
- ✅ 安全性考虑
常见 Review 意见
代码质量:
typescript
// ❌ 需要改进
function process(data: any) {
const result = data.map((x) => x * 2);
return result;
}
// ✅ 改进后
/**
* 处理数据,将每个值翻倍
*/
function processData(numbers: number[]): number[] {
return numbers.map((num) => num * 2);
}错误处理:
typescript
// ❌ 需要改进
async function fetchData() {
const response = await fetch(url);
return response.json();
}
// ✅ 改进后
async function fetchData(): Promise<Data> {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
return await response.json();
} catch (error) {
console.error("获取数据失败:", error);
throw error;
}
}发布流程
发布由维护者执行:
- 更新版本号
- 更新 CHANGELOG
- 创建 tag
- 发布到 npm
- 发布 GitHub Release
获取帮助
如果你在贡献过程中遇到问题:
- 📖 查看 开发指南
- 🧪 查看 测试指南
- 💬 在 Issue 中提问
- 💡 参与 Discussions
贡献者
感谢所有贡献者!
许可证
通过贡献代码,你同意你的贡献将在 MIT License 下发布。