2025-07-18 13:14:28 +08:00

451 lines
11 KiB
Markdown
Executable File
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.

---
title: 贡献指南
description: 如何为 py-xiaozhi 项目贡献代码
sidebar: false
outline: deep
---
<div class="contributing-page">
# 贡献指南
<div class="header-content">
<h2>如何为 py-xiaozhi 项目贡献代码 🚀</h2>
</div>
## 前言
感谢您对 py-xiaozhi 项目感兴趣!我们非常欢迎社区成员参与贡献,无论是修复错误、改进文档还是添加新功能。本指南将帮助您了解如何向项目提交贡献。
## 开发环境准备
### 基本要求
- Python 3.9 或更高版本
- Git 版本控制系统
- 基本的 Python 开发工具(推荐使用 Visual Studio Code
### 获取源代码
1. 首先,在 GitHub 上 Fork 本项目到您自己的账号
- 访问 [py-xiaozhi 项目页面](https://github.com/huangjunsen0406/py-xiaozhi)
- 点击右上角的"Fork"按钮
- 等待 Fork 完成,您将被重定向到您的仓库副本
2. 克隆您 fork 的仓库到本地:
```bash
git clone https://github.com/YOUR_USERNAME/py-xiaozhi.git
cd py-xiaozhi
```
3. 添加上游仓库作为远程源:
```bash
git remote add upstream https://github.com/huangjunsen0406/py-xiaozhi.git
```
你可以使用 `git remote -v` 命令确认远程仓库已正确配置:
```bash
git remote -v
# 应显示:
# origin https://github.com/YOUR_USERNAME/py-xiaozhi.git (fetch)
# origin https://github.com/YOUR_USERNAME/py-xiaozhi.git (push)
# upstream https://github.com/huangjunsen0406/py-xiaozhi.git (fetch)
# upstream https://github.com/huangjunsen0406/py-xiaozhi.git (push)
```
### 安装开发依赖
- 其他依赖需要查看指南下的相关文档
```bash
# 创建并激活虚拟环境(推荐)
python -m venv venv
source venv/bin/activate # 在 Windows 上使用: venv\Scripts\activate
# 安装项目依赖
pip install -r requirements.txt
```
## 开发流程
### 与主仓库保持同步
在开始工作之前,确保您的本地仓库与主项目保持同步是非常重要的。以下是同步本地仓库的步骤:
1. 切换到您的主分支(`main`
```bash
git checkout main
```
2. 拉取上游仓库的最新更改:
```bash
git fetch upstream
```
3. 将上游主分支的更改合并到您的本地主分支:
```bash
git merge upstream/main
```
4. 将更新后的本地主分支推送到您的 GitHub 仓库:
```bash
git push origin main
```
### 创建分支
在开始任何工作之前,请确保从最新的上游主分支创建新的分支:
```bash
# 获取最新的上游代码(如上节所述)
git fetch upstream
git checkout -b feature/your-feature-name upstream/main
```
为分支命名时,可以遵循以下约定:
- `feature/xxx`:新功能开发
- `fix/xxx`:修复 bug
- `docs/xxx`:文档更新
- `test/xxx`:测试相关工作
- `refactor/xxx`:代码重构
### 编码规范
我们使用 [PEP 8](https://www.python.org/dev/peps/pep-0008/) 作为 Python 代码风格指南。在提交代码前,请确保您的代码符合以下要求:
- 使用 4 个空格进行缩进
- 行长度不超过 120 个字符
- 使用有意义的变量和函数名称
- 为公共 API 添加文档字符串
- 使用类型提示Type Hints
我们推荐使用静态代码分析工具来帮助您遵循编码规范:
```bash
# 使用 flake8 检查代码风格
flake8 .
# 使用 mypy 进行类型检查
mypy .
```
### 测试
在提交之前,请确保所有测试都能通过
## 提交变更
### 提交前的检查清单
在提交您的代码之前,请确保完成以下检查:
1. 代码是否符合 PEP 8 规范
2. 是否添加了必要的测试用例
3. 所有测试是否通过
4. 是否添加了适当的文档
5. 是否解决了您计划解决的问题
6. 是否与最新的上游代码保持同步
### 提交变更
在开发过程中,养成小批量、频繁提交的习惯。这样可以使您的更改更容易跟踪和理解:
```bash
# 查看更改的文件
git status
# 暂存更改
git add file1.py file2.py
# 提交更改
git commit -m "feat: add new feature X"
```
### 解决冲突
如果您在尝试合并上游更改时遇到冲突,请按照以下步骤解决:
1. 首先了解冲突的位置:
```bash
git status
```
2. 打开冲突文件,您会看到类似以下标记:
```
<<<<<<< HEAD
您的代码
=======
上游代码
>>>>>>> upstream/main
```
3. 修改文件以解决冲突,删除冲突标记
4. 解决完所有冲突后,暂存并提交:
```bash
git add .
git commit -m "fix: resolve merge conflicts"
```
### 提交规范
我们使用[约定式提交](https://www.conventionalcommits.org/zh-hans/)规范来格式化 Git 提交消息。提交消息应该遵循以下格式:
```
<类型>[可选 作用域]: <描述>
[可选 正文]
[可选 脚注]
```
常用的提交类型包括:
- `feat`:新功能
- `fix`:错误修复
- `docs`:文档更改
- `style`:不影响代码含义的变更(如空格、格式化等)
- `refactor`:既不修复错误也不添加功能的代码重构
- `perf`:提高性能的代码更改
- `test`:添加或修正测试
- `chore`:对构建过程或辅助工具和库的更改
例如:
```
feat(tts): 添加新的语音合成引擎支持
添加对百度语音合成API的支持包括以下功能
- 支持多种音色选择
- 支持语速和音量调节
- 支持中英文混合合成
修复 #123
```
### 推送更改
完成代码更改后,将您的分支推送到您的 GitHub 仓库:
```bash
git push origin feature/your-feature-name
```
如果您已经创建了 Pull Request并且需要更新它只需再次推送到同一分支即可
```bash
# 在进行更多更改后
git add .
git commit -m "refactor: improve code based on feedback"
git push origin feature/your-feature-name
```
### 创建 Pull Request 前同步最新代码
在创建 Pull Request 前,建议再次与上游仓库同步,以避免潜在的冲突:
```bash
# 获取上游最新代码
git fetch upstream
# 将上游最新代码变基到您的特性分支
git rebase upstream/main
# 如果出现冲突,解决冲突并继续变基
git add .
git rebase --continue
# 强制推送更新后的分支到您的仓库
git push --force-with-lease origin feature/your-feature-name
```
注意:使用 `--force-with-lease` 比直接使用 `--force` 更安全,它可以防止覆盖他人推送的更改。
### 创建 Pull Request
当您完成功能开发或问题修复后,请按照以下步骤创建 Pull Request
1. 将您的更改推送到 GitHub
```bash
git push origin feature/your-feature-name
```
2. 访问 GitHub 上您 fork 的仓库页面,点击 "Compare & pull request" 按钮
3. 填写 Pull Request 表单:
- 使用清晰的标题,遵循提交消息格式
- 在描述中提供详细信息
- 引用相关 issue使用 `#issue编号` 格式)
- 如果这是一个进行中的工作,请添加 `[WIP]` 前缀到标题
4. 提交 Pull Request等待项目维护者审核
### Pull Request 的生命周期
1. **创建**:提交您的 PR
2. **CI 检查**:自动化测试和代码风格检查
3. **代码审核**:维护者会审核您的代码并提供反馈
4. **修订**:根据反馈修改您的代码
5. **批准**:一旦您的 PR 被批准
6. **合并**:维护者会将您的 PR 合并到主分支
## 文档贡献
如果您想改进项目文档,请按照以下步骤操作:
1. 按照上述步骤 Fork 项目并克隆到本地
2. 文档位于 `documents/docs` 目录下,使用 Markdown 格式
3. 安装文档开发依赖:
```bash
cd documents
pnpm install
```
4. 启动本地文档服务器:
```bash
pnpm docs:dev
```
5. 在浏览器中访问 `http://localhost:5173/py-xiaozhi/` 预览您的更改
6. 完成更改后,提交您的贡献并创建 Pull Request
### 文档编写准则
- 使用清晰、简洁的语言
- 提供实际示例
- 对复杂概念进行详细解释
- 包含适当的截图或图表(需要时)
- 避免技术术语过多,必要时提供解释
- 保持文档结构一致
## 问题反馈
如果您发现了问题但暂时无法修复,请在 GitHub 上[创建 Issue](https://github.com/huangjunsen0406/py-xiaozhi/issues/new)。创建 Issue 时,请包含以下信息:
- 问题的详细描述
- 重现问题的步骤
- 预期行为和实际行为
- 您的操作系统和 Python 版本
- 相关的日志输出或错误信息
## 代码审核
提交 Pull Request 后,项目维护者将会审核您的代码。在代码审核过程中:
- 请耐心等待反馈
- 及时响应评论和建议
- 必要时进行修改并更新您的 Pull Request
- 保持礼貌和建设性的讨论
### 处理代码审核反馈
1. 认真阅读所有评论和建议
2. 针对每个要点作出回应或更改
3. 如果您不同意某个建议,礼貌地解释您的理由
4. 修改完成后,在 PR 中留言通知审核者
## 成为项目维护者
如果您持续为项目做出有价值的贡献,您可能会被邀请成为项目的维护者。作为维护者,您将有权限审核和合并其他人的 Pull Request。
### 维护者的职责
- 审核 Pull Request
- 管理 issue
- 参与项目规划
- 回答社区问题
- 帮助引导新贡献者
## 行为准则
请尊重所有项目参与者,遵循以下行为准则:
- 使用包容性语言
- 尊重不同的观点和经验
- 优雅地接受建设性批评
- 关注社区最佳利益
- 对其他社区成员表示同理心
## 常见问题解答
### 我应该从哪里开始贡献?
1. 查看标记为 "good first issue" 的问题
2. 修复文档中的错误或不清晰的部分
3. 添加更多测试用例
4. 解决您自己在使用过程中发现的问题
### 我提交的 PR 已经很久没有回应了,我该怎么办?
在 PR 中留言,礼貌地询问是否需要进一步的改进或澄清。请理解维护者可能很忙,需要一些时间来审核您的贡献。
### 我可以贡献哪些类型的更改?
- 错误修复
- 新功能
- 性能改进
- 文档更新
- 测试用例
- 代码重构
## 致谢
再次感谢您为项目做出贡献!您的参与对我们非常重要,共同努力让 py-xiaozhi 变得更好!
</div>
<style>
.contributing-page {
max-width: 900px;
margin: 0 auto;
padding: 2rem 1.5rem;
}
.contributing-page h1 {
text-align: center;
margin-bottom: 1rem;
}
.header-content {
text-align: center;
}
.header-content h2 {
color: var(--vp-c-brand);
margin-bottom: 1rem;
}
.contributing-page h2 {
margin-top: 3rem;
padding-top: 1rem;
border-top: 1px solid var(--vp-c-divider);
}
.contributing-page h3 {
margin-top: 2rem;
}
.contributing-page code {
background-color: var(--vp-c-bg-soft);
padding: 0.2em 0.4em;
border-radius: 3px;
}
.contributing-page pre {
margin: 1rem 0;
border-radius: 8px;
overflow: auto;
}
</style>