# 参考 https://github.com/GDJiaMi/frontend-standards https://www.git-tower.com/learn/git/ebook/cn/command-line/advanced-topics/git-flow # 1、工作流规范(基于Git) ## 1.1、开发 ### 1.1.1、[版本规范](https://semver.org/lang/zh-CN/) 版本格式:主版本号.次版本号.修订号,版本号递增规则如下: 1. 主版本号:当你做了不兼容的 API 修改, 2. 次版本号:当你做了向下兼容的功能性新增, 3. 修订号:当你做了向下兼容的问题修正。 先行版本号及版本编译元数据可以加到“主版本号.次版本号.修订号”的后面,作为延伸。 ### 1.1.2、Git分支模型 #### master分支 master分支表示一个稳定的发布版本. 对应百宝袋的大版本. - 场景: 所有应用会跟随版本迭代, 在dev分支测试稳定后, 会合并到master分支, 并使用tag标记应用版本 - tag规范: `v{version}`, 例如v0.1.0 - 人员: 由项目负责人进行审核合并, 普通开发者没有权限 #### dev分支 开发者主要工作的分支, 最新的特性或bug修复都会提交到这个分支. 开发者如果在该分支进行了提交,在push到远程之前应该先pull一下, 并尽量使用rebase模式,保证分支的简洁 - 命名规范: dev - tag规范: 在dev分支中也可能会经历发布过程, 例如bug修复版本. 这里同样使用tag来标记这些发布. 例如v0.1.1 - 提交规范:如果实在开发分支上进行开发,在推送到远程之前,应该使用`git rebase`形式更新本地分支。 #### feature分支 涉及多人协作或者大功能的开发, 应该从dev分支checkout出独立的feature分支, 避免干扰dev分支 - 场景: - 涉及多人协作: 团队多个成员在同一个项目下负责开发不同的功能, 这时候每个成员在自己的feature分支独立开发 - 大功能开发: 大功能开发跨越周期比较长, 需要多次迭代才会稳定. 这时候应该在独立的分支上开发. 方便跟踪历史记录, 也免于干扰dev分支的迭代和发布 - 命名规范 - feature/name: name是功能名称 - feature/version: 这也是团队常见的模式, 当无法使用一个功能名称来描述时, 可以使用版本号作为’功能’ - 合并时机 1. 当feature分支迭代稳定, 并通过测试后, 合并到dev分支. 合并到dev后, **feature分支的生命周期就结束了**. 后续bug修复和功能优化直接在dev开发 2. 当多个feature分支需要合并对外发布临时版本时. 合并到preview分支 . ⚠️这种情况不应该合并到dev分支, 因为feature分支可能还不稳定或未完成. 比如为了联调某些功能. - 合并方式 - 不要使用fast-forward. 这样可以在分支图上查看到分支历史 #### preview分支 临时的预览分支, preview分支用于临时合并feature分支, 这其中可能会修复某些bug或者冲突. 可以选择性地将这些提交cherrypick回feature分支. 当预览结束后就可以销毁preview分支 #### release分支 遵循gitflow规范 - 场景: 需要为某个正式版本修复bug(hotFix)时, 从master的对应tag中checkout release分支 - 命名规范: release/{version} - 如何修复 + 如果对应bug可以在dev分支直接被修复, 可以先提交到dev分支(或者已经修复了), 然后再cherrypick到release分支 + 如果bug在新版本无法复现. 比如新版本升级了依赖. 那么在release分支直接修复即可 ### 1.1.3、提交信息规范 #### 格式 我们采用angular的提交规范, 在这个规范的基础上支持(可选)`emoji`进行修饰 ``` ():