Contributing Guidelines 开发指南
撰写给工作室的代码贡献规范
本项目开发必须遵循以下规范。
请注意, 英语是开发过程中唯一允许使用的语言 ,比如代码、注释、 Git message 和代码内文档。
因为复杂字符存在编码问题,在整个开发协作过程中应当避免。
代码风格
前端
WIP
后端
后端开发编写代码参考
开发者必须严格遵守上面准则。
Git 工作流
我们使用 git 作为我们的版本控制系统,并遵循下面的工作流程。
- 在修复 bug 或实现新功能之前,开发者应首先 创建一个新 issue 。
发起新 issue 时使用 该模板 。 - 处理 issue 时,应当 创建一个新分支 ,分支相关规范如下所述。
- 若开发取得进展,请立即提交更改。
具体地,当 一个功能开发完毕后,就提交更改 。
Git 的提交信息请遵守 如下规范 。 - 解决 issue 后,请为该分支 创建一个 Pull Request 请求合并代码 。
参阅 如下详述 。 - 在创建 Pull Request 后,开发者应首先 自我审查 代码。
Pull Request 指定的代码审查者而后将会审查你的代码,如果没有问题将会进行合并。
开发者可能需要代码审查者进行进一步讨论。
分支规范
我们主要使用三种分支:
main
:主分支
main
分支应当始终处于 稳定 状态,是新版本的基准分支。
main
分支的合并仅接受带有[Release]
标签的 Pull Request 。
紧急修复除外,应当直接合并到main
分支中。
main
分支受到严格保护。
除了仓库的初始化外,没有人可以直接推送到主分支。dev
: 开发的基准分支
dev
分支是开发的基准分支。
新功能和 Bug 修复会通过 Pull Request 被合并到dev
分支中。
当dev
分支稳定后,需要发布新版本时,
仓库维护者应当创建一个带有[Release]
标签的 Pull Request ,
将dev
分支合并到main
分支中。
dev
分支收到保护,
只有仓库维护者或具有权限的人才能直接推送至dev
分支。- 其他开发分支:用于开发具体功能,从
dev
分支创建。
开发分支的命名约定为:
<类型>/<关联 issue 编号>-<简短描述>
短划线( - )用于分隔问题编号和简短描述,
下划线( _ )应用于分隔简短描述中的单词。
类型
开发分支主要有 6 种类型:
hotfix
: 对main
分支的 紧急修复
当在main
中遇到应该立即修复的 bug 时,应该创建一个hotfix
分支。
修复后,该分支应直接合并到main
分支中。feature
: 新功能
当实现新功能时,应创建feature
分支。
实现后,应将分支合并到dev
分支中。bugfix
: Bug 修复
修复 bug 时,应创建bugfix
分支。
修复 bug 后,应将该分支合并到 `dev`` 分支中。documentation
: 项目 文档
在编写或修补文档时,应创建documentation
分支。
使用documentation
分支时,开发者不应更改代码。
文档完成后,该分支应合并到dev
中。chore
: 除上述以外的其他 杂项工作
在进行其他杂项任务时,应该创建一个chore
分支。
非新功能、 bug 修复或文档修补的更改,
例如工作区配置、CI/CD 配置等,均属于杂务。
完成后,该分支应该合并到dev
分支中。
关联 issue 编号
<关联 issue 编号>
是 Github Issue 中 issue 的编号。
在开发新功能或修复 bug 之前,应当先创建一个新 issue 。
主题
<主题>
是问题的简短描述。
为了规避潜在的编码问题,应使用 英语 。
描述应 尽可能简短 ,以英文小短句为主。
Git 提交信息
制定此标准时,参考了 这篇文章
和 Google Blocky Git Commit Guide 。
提交信息的格式为:
<类型>(<作用域>): <主题>
<正文>
<脚注>
类型
<类型>
是更改的分类, 应该是以下分类之一 :
feat
: 新功能或特性实现fix
: bug 修复chore
: 与修复或功能无关的更改,
并且不修改源代码或测试文件(例如更新依赖关系)refactor
: 代码重构,既没有新增功能也没有修复 bugdocs
: 更新文档,如 README 或其他 Markdow 文件style
: 不影响代码含义的更改,
可能与代码格式有关,如缩进问题、缺少分号等。test
: 包括新的或纠正以前的测试perf
: 性能改进ci
: 持续集成( CI/CD )相关build
: 影响构建系统或外部依赖关系的更改revert
: 回退之前的提交
补充美化版本:
🎉 init: 初始化
🚀 release: 发布新版本
🎨 style: 代码风格修改(不影响代码运行的变动)
✨ feat: 添加新功能
🐛 fix: 修复 bug
📝 docs: 对文档进行修改
♻️ refactor: 代码重构(既不是新增功能,也不是修改 bug 的代码变动)
⚡ perf: 提高性能的代码修改
🧑💻 dx: 优化开发体验
🔨 workflow: 工作流变动
🏷️ types: 类型声明修改
🚧 wip: 工作正在进行中
✅ test: 测试用例添加及修改
🔨 build: 影响构建系统或外部依赖关系的更改
👷 ci: 更改 CI 配置文件和脚本
❓ chore: 其它不涉及源码以及测试的修改
⬆️ deps: 依赖项修改
🔖 release: 发布新版本
重大变更
重大更改是指可能破坏其他部分(包括用户)的更改,
导致开发人员或用户不得不做额外的工作。
进行重大更改的提交应在提交类型后附加一个 !
符号。
作用域
<作用域>
是 可选 的,描述更改的影响范围。
对范围的描述没有严格的规定,但它应该是一个精确描述受影响区域的短语,并且应该 括在括号( ( )
)中。
使用 受影响函数的名称
(不是函数签名,可以是程序部分的抽象名称)通常是不错的选择。
主题
`<主题>`` 是变更内容的简短描述,
它应该是一个符合 以下规则 的 英文短句 :
- 不要 在开头使用大写字母。
- 不要 以句号 (
.
) 结尾。 - 使用 祈使句,现在时:
“ change ”而不是“ changed ”或“ changes ”。 - 不超过 50 个字符 。
正文
<正文>
是 可选 的,是对提交的 英文 详细描述。
当主题中的更改过于复杂而无法用一个英文短句描述时,
请使用 Markdown 列表以有组织的方式在正文中描述更改。
脚注
<footer>
是 可选 的,用于引用 issue 。
根据 GitHub Docs ,
有一些关键字可用于引用 issue ,甚至关闭它们。
我们使用关键字的一个子集:
Closes
: 本次提交将关闭一个 issue。
请 不要 使用此关键字,因为我们希望 GitHub 自动关闭问题。Fixes
: 本次提交解决了一个 issue。
当提交最终解决了一个 issue(包括 bug 、功能请求等任何类型)时,
使用此关键字引用该 issue ,而不是Closes
。Resolves
: 本次提交 正在处理 一个issue。
当提交正在解决一个 issue 时,
特别是当提交不是解决该问题的唯一提交时,使用此关键字。
拉取请求 Pull Request
开发分支完成开发后,应创建一个 Pull Request ,
将该分支合并到dev
分支中。
当 dev
分支处于稳定状态时,将创建一个标记为 [Release]
的拉取请求,
将其合并到 main
分支中。
main
分支受到 严格保护 。
除了存储库的初始化外, 没有人 可以直接推送到主分支。
dev
分支受 保护 。
只有 仓库所有者或具有权限的人 才能直接推送至 dev
分支。
标题
拉取请求的标题应该是:
[<类型>] <简短描述> #<问题编号>
<类型>
是开发分支的类型。
<简短描述>
是问题的简短描述。
<问题编号>
是问题跟踪器中问题的编号,被该拉取请求用 #
引用。
一种例外情况是当合并 dev
分支到 main
分支时。
此时标题应为 [Release] <软件包名> <版本号>
。
描述
拉取请求的描述包含 主要修改或修复功能 。
如果您希望 审阅者 关注更改的某些部分,
请使用 markdown 清单 将其说明。
当新版本发布时,描述应该是该版本的发布说明。
一个简单的发布说明模板如下:
# CHANGELOG 更新日志
## Bug Fixes 问题修复
- #<问题编号>
## Enhancements 功能优化
- #<问题编号>
## Features 新功能
- #<问题编号>
## <其他类别(双语描述)>
源分支和目标分支
源分支 | 目标分支 |
---|---|
dev | main |
hotfix | main |
其他开发分支 | dev |
处理冲突
在 合并拉取请求之前 ,应先 解决冲突 。
有一种推荐的解决冲突的方法:
- 将 目标分支 合并到 源分支 中。
- 通过工具和解决冲突并提交。
- 如果一切正常,将 源分支 合并到 目标分支 。
上述过程中,合并产生的 Git 提交消息使用 chore
分类,
并按照提交消息中的主题部分要求,将消息的第一个字母改为小写。
合并
审阅者应在合并之前 审阅拉取请求中的所有更改 。
合并拉取请求时,请始终使用 压缩并合并( Squash and Merge ) 。
合并的 Git 提交消息主题应为 拉取请求的标题 。
合并的 Git 提交消息正文应为 拉取请求的更改 ,
由 GitHub 自动生成。
当合并标记为 [Release]
的拉取请求时,
合并的 Git 提交消息主题应为 [Release] <软件包名> <版本号>
,
正文应为该版本的发布说明。
Issue 模板
除以下部分外,Issue 的格式没有严格限制:
标题
Issue 的标题分为两部分:
[<类别>]: <描述> (<状态>)
类别为以下之一:
Bug
: 有功能无法正常工作Feature Request
: 请求一项新的功能或特性Enhancement
: 请求增强现有功能Documentation
: 文档缺失或需要改进Discussion
: 讨论一些话题
<Catagory>
应包含在 [ ]
中。
<Description>
应该是问题的简短描述。
如果需要长篇描述,应该放在问题的正文中。
<Status>
是 可选的 ,它是问题的状态,只能由开发人员附加。
当修复合并到 dev
时,状态应附加为 Fixed
。
在修复合并到主分支后,问题将自动关闭。
负责人
处理 issue 的人。如果您不确定应该分配给谁,您可以将其留空。
标签
标签用于对问题分类。您可以向 issue 添加多个标签。
可用的标签大致有:
bug
: 有功能无法正常工作enhancement
: 增强现有功能documentation
: 文档缺失或需要改进discussion
: 讨论一些话题