【开发规范系列】(三)代码提交规范

首发博客地址

系列文章地址


规范

  1. 切忌一次大量提交代码,每次fix或feat一个功能即需要提交到本地,可以不提交到远程
  2. 提交代码前必须先拉代码
  3. 一般情况下不得强制提交
  4. 一个新功能拉取单独的分支开发,开发完后再合并到主分支上
  5. 禁止无意义说明提交
  6. 通常需要每天下班前推送本地仓库到远程仓库中

一、背景

每次提交代码到Git仓库时,都需要写commit message。通常情况下,commit message应该清晰明了,说明本次提交的目的和具体操作等。然而,在日常开发中,开发者们提交的commit message千差万别,中英文混用,导致后续代码维护成本很高,有时候甚至自己都不知道修复的是什么问题。因此,为了解决这些问题,我们希望通过一种方式来监控用户的git commit message,以提高代码规范,提高开发效率。

二、约定

我们要求所有项目的Commit Log都遵循一个精确的格式,以增加可读性,便于查看变更历史,并养成良好的git使用习惯。我们将这个规范作为git hook的commit-msg和pre-receive执行,不符合规范的commit无法提交。全面执行后,可以自动执行以下操作:

  • 平台工具包可以直接根据commit log生成每次版本的changelog。
  • 上线申请系统可以自动附带本次上线的commit log。
  • 要求每次提交都认真思考,保持commit log的整洁性,每次commit都要具有局部完整性。

三、Commit Log Format

Commit Log包含三个部分:header、body、footer。其中,header是必需的,格式固定,body在必要时用于详细解释变更。

commit log格式如下:

xml 复制代码
<types>(<scopes>): <subject>

<空行>

<body>

<空行>

<footer>

注意:冒号后面必须有一个小写空格,types和scopes可以是多个,中间用逗号分隔。

举例:

  1. 仅header:
scss 复制代码
fix(service,dao): 修改产品类型时不过滤产品Type

仅header,涉及模块较多用*代替
less 复制代码
refactor(*): 修改DTO模型前缀

有header和body
javascript 复制代码
fix(language-service): Improve signature selection for pipes with args

Pipes with arguments like `slice:0` or `slice:0:1` should not produce

diagnostic errors.

有header、body、footer
go 复制代码
func(core,logic): 添加礼包审核

添加商品编辑审核状态和回调,blablablabla

PRD:https://km.sankuai.com/page/194127085

1、Type

英文,小写。必须是以下中的一个或多个:

  • func: function,小功能。注意:feat改成func了,避免大家按feature这个大粒度来提交,期望是按小功能点分批提交,另外避免跟feature分支规范混淆。
  • fix: bug修复,包括编码过程中的逻辑修复,不特指线上bug修复。
  • refactor: 重构代码,非bug修复和性能优化,包括编码过程中的代码结构调整,不特指重构项目。
  • impr: improvement,小的代码设计改进。
  • perf: 性能优化。
  • apm: 仅监控打点、异常日志处理相关。
  • chore: 无关紧要的改动,例如删除用不到的注解、调整日志内容等。
  • jvm: 仅JVM参数变更。
  • pom: 仅依赖和版本变化。
  • conf: 仅配置变化,Spring配置、properties文件。
  • docs: 仅文档变更。
  • style: 代码格式调整,如import清理,代码格式化。
  • test: 单测和自动化case相关。
  • typo: 修复小的拼写错误。
  • wip: work in progress,少用,用于开发中的不完整提交,新工程开始时偶尔使用。

2、Scope

英文,小写。表示变更的包或模块范围,可以是多个组合,如果涉及范围较大,可以用*代替。各服务可以自行定义,组内同学可以轻易理解。通用scope列表如下:

  • dto: dto结构变化。
  • core: core包。
  • service: service层代码。
  • dao: dao层代码。
  • sql: sql代码变更。

除了上述通用字段外,各方向可以自行定义关键字。例如,以下是商品平台中定义的字段:

  • price: 价格相关。
  • stock: 库存相关。
  • product: 商品相关。
  • idl: IDL文件变化。

3、Subject

中文。简要描述修改,结尾不要有句号。

4、Body

中文。修改的背景(为什么做这次修改),说明修改逻辑。

5、Footer

中文。可以放置需求wiki或task链接,对以后其他同学查看很有用。

四、使用插件生成日志

安装该插件后,在提交页面会有一个按钮

本文由mdnice多平台发布

相关推荐
sxhcwgcy2 小时前
SpringBoot 使用 spring.profiles.active 来区分不同环境配置
spring boot·后端·spring
稻草猫.3 小时前
Spring事务操作全解析
java·数据库·后端·spring
希望永不加班4 小时前
SpringBoot 整合 MongoDB
java·spring boot·后端·mongodb·spring
Lzh编程小栈4 小时前
数据结构与算法之队列深度解析:循环队列+C 语言硬核实现 + 面试考点全梳理
c语言·开发语言·汇编·数据结构·后端·算法·面试
妙蛙种子3114 小时前
【Java设计模式 | 创建者模式】工厂方法模式
java·后端·设计模式·工厂方法模式
freejackman7 小时前
Java从0到1---基础篇
java·开发语言·后端·idea
无心水7 小时前
20、Spring陷阱:Feign AOP切面为何失效?配置优先级如何“劫持”你的设置?
java·开发语言·后端·python·spring·java.time·java时间处理
0xDevNull7 小时前
Java 21 新特性概览与实战教程
java·开发语言·后端
Gse0a362g7 小时前
Go - Zerolog使用入门
开发语言·后端·golang
Renhao-Wan8 小时前
Docker 核心原理详解:镜像、容器、Namespace、Cgroups 与 UnionFS
java·后端·docker·容器