IDEA 代码提交前流程及提交日志模板化

news2025/7/15 1:20:38

前言

在开发大型项目时,通常都是由团队来进行开发。此时,每个人有每个人的代码编写风格和提交习惯,如果放任自由发挥,那么代码质量和代码提交日志就难免风格各异,导致项目代码质量难以保持统一。针对这一问题,往往公司在以项目组进行开发时,在进入正式编码前,都会制定一个标准的流程,用来规范代码提交前的流程,同时对提交日志进行规范化。从而最大程度上保持项目的代码风格统一,提高代码可读性。

以下就给大家介绍一下最常见的代码提交前的规范化流程,以及如何模板化我们的代码提交日志。

代码提交前检查流程

推荐插件

p3c

  • 下载地址

https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines/versions

  • 安装及使用

https://github.com/alibaba/p3c/wiki/IDEA%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3

SonarLint

  • 下载地址

https://plugins.jetbrains.com/plugin/7973-sonarlint/versions

  • 安装及使用

https://www.cnblogs.com/cocoxu1992/p/11336723.html

提交前的配置项

提交前的配置

Alibaba Code Guidelines

安装 p3c 插件后,才会有该选项。在提交代码改动之前,如果勾选此选项,则会去扫描代码中不符合 p3c 规则中的代码,然后弹窗提示存在可疑代码,此时可以到控制台查看存疑的代码。然后只需要根据控制台中提示的去修改代码即可。

  • 代码存疑弹窗
  • 控制台中存疑的代码提示

Reformat code

提交前格式化代码,假设我们在代码中写了如下代码:

int a=3;

如果我们在提交前勾选了此选项,提交时 IDEA 就会自动对此行代码进行格式化,变成以下的格式,从而大大提高代码可读性。

int a = 3;

Rearrange code

重新编排代码,IntelliJ IDEA 支持各种复杂的编排设置选项,当我们在 IDEA 中设置好了编码功能之后,这里就可以尝试勾选这个进行自动编排。不过一般没有去做特定的编码功能设置,因此建议不勾选。

Optimize imports

优化导包(删除无用的导包)。假如在写代码时一开始引入了 Scanner 包,但后续又没有用到,此时勾选此选项 IDEA 就会自动将引入的 Scanner 包删除。

  • 勾选前
package com.demo;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
  • 勾选后
package com.demo;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

Analyze code

勾选该选项后,IDEA 会用默认的配置文件去扫描我们所写代码的质量。如果扫描发现问题,则会弹出以下类似的弹窗,此时只要点击 Review 就可以对代码中存在问题的地方进行 Review,根据所给提示对代码进行修改。

Check TODO

检查代码中存在 @todo 注解的地方并给出提示。一般在代码中添加 @todo 表示此时代码中还有未完成的功能,此时可以提醒你去补全还未完成的功能代码。

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World!");
        //@todo
    }
}

如果我们新增的代码如上,此时如果在提交点前勾选 Check TODO 选项,就会弹窗提示。

此时点击 Review 就可以去查看对应分析结果,然后去找到对应 todo 所在的代码对它进行补充。

Cleanup

清除下版本控制系统,去掉一些版本控制系统的错误信息,主要针对 SVN,Git 不适用,一般建议不勾选。

Update copyright

如果代码需要版权标识时,需要提前在 IDEA 中配置相关版权信息。配置的流程 settings->Editor->copyright->copyright profiles,然后添加类似于以下的版权信息:

Copyright(c)2002-2022, xxx 有限公司
项目名称:$project.name
文件名称:$file.fileName
Date:$today
Author:xxx

配置完成后,当提交你的代码更改时,勾选该选项可以检查更新版权,这样提交后更改的文件将有它们的版权更新。

Perform SonarLint analysis

安装 SonarLint 插件后才会有的选项。勾选该选项后,SonarLint 会对代码进行检查,发现代码中的一些 bug、漏洞、异味。然后根据控制台中的提示信息对代码进行修改后再次提交,能够一定程度上提高代码质量。

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World!");
        System.out.println("demo");
        int a;
        boolean flag = false;
        //@todo
    }
}


提交日志模板化(Git Commit Template)

概述

通过使用该插件,能够规范在使用 IDEA 提交代码时的注释说明。通过模板化后的日志,便于快速查找,回溯之前的工作。

下载安装

  1. 下载地址

https://plugins.jetbrains.com/plugin/9861-git-commit-template/versions

  1. 安装

https://blog.csdn.net/m0_46636892/article/details/122116712

使用教程

提交信息的模板

<type 类型>(<scope 可选作用域>): <subject 描述>
// 空行
<body 可选的正文>
// 空行
<footer 可选的脚注>

主要分为三部分:

  • Head(<type 类型>(<scope 可选作用域>): <subject 描述>
  • Body(<body 可选的正文>
  • Footer(<footer 可选的脚注>

Head 参数说明

  1. type(必填)
类型英文中文说明
featA new feature新功能
fixA bug fixbug 修复
docsDocumention only文档注释
styleChanges that do not affect the meaning of the code(white-space、formatting、missing semi-colons、etc)不影响代码运行的变动(格式化、去空格等)
refactorA code change that neither fixes a bug nor adds a feature重构、优化(既不增加新功能,也不是修复 bug
perfA code change that improves performance性能优化
testAdding missing tests or correcting existing tests增加测试
buildChanges that affect the build system or external dependencies影响生成构建或外部依赖项的更改
ciChanges to our CI configuration files and scripts对配置项配置文件和脚本的更改
choreOther changes that don't modify src or test files其他不影响源码和测试的改动
revertReverts a previous commit回退版本
  1. scope(可选)

用户说明此次提交所影响的范围,常见的有数据层、控制层、视图层等,这个需要根据自己的项目来具体定义。

  1. subject(必填)

此次提交的概括,一般建议不超过 50 字,结尾不加任何标点符号。

Body 参数说明

对此次提交的详细描述,可以分为多行,每行建议控制在 72 个字以内,以条目的形式给出,范例如下:

- 修复 bug1
- 修复 bug2

Footer 参数说明

主要用于两种情况:

  1. 不兼容的变动,对应具体使用部分图中的 Breaking changes.
  2. 关闭 Issue,对应具体使用部分图中的 Closed issues.

具体使用

  1. 安装完成后,在代码提交界面会有以下图标,点击进行参数配置。

  1. 根据自己的需求进行相关配置。

  1. 完成配置之后,点击右下角的 ok,就会自动根据模板生成提交的具体信息,最后进行提交即可,一个自动生成的具体示例如下:
fix(改动生效的范围): 代码改动的简述

代码改动的具体描述1

BREAKING CHANGE: 不兼容的变更

Closes 关闭的issue

总结

可能屏幕前的你所在的项目组并没有这么多的流程和提交规范,但养成良好的编码习惯总归是好的。代码不仅仅是写给自己看的,一个高手不仅仅是能够实现复杂的功能,能把代码编写得能让人看着简洁清爽也是一种艺术。

好了,今天的文章到此就结束了,感谢大家赏脸阅读。对于文中如果有描述不清的地方,或者有什么建议我改进的建议,欢迎与我讨论交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/36355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter高仿微信-第44篇-群聊

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; group_chat_main.dart /*** Author : wangning* Email …

Unity VR 开发教程: Oculus 一体机开发 (一) 环境配置(基于 Oculus Integration v46)

文章目录&#x1f4d5;教程说明&#x1f4d5;安装 Unity 时需要添加的模块&#x1f4d5;设置 Unity 的 Build Settings&#x1f4d5;导入 Oculus Integration&#x1f4d5;设置 Project Settings⭐通用设置⭐Rendering 设置⭐Identification 设置⭐Configuration 设置⭐XR Plug…

信号类型(雷达)——雷达波形认识(一)

系列文章目录 《信号类型&#xff08;雷达通信&#xff09;》 文章目录 前言 简述 总结 前言 本文将结合个人研究经验&#xff0c;从雷达波形简单谈谈我对雷达的认识。之后将对常见的雷达波形进行简单分析。 简述 雷达的波形决定了信号处理的手段以及对应的雷达功能&#x…

关于WEB端实现电子海图研究二GeoServer

记笔记&#xff0c;免忘记&#xff01; 接前面思路篇。本文章主要是讲&#xff0c;利用GeoServer对shp文件进行数据样式调整 &#xff0c;数据拼接&#xff0c;shp文件发布&#xff0c;矢量切片。 Geoserver官网&#xff1a;GeoServer 可以使用最新版本&#xff0c;我使用的…

边缘计算那些事儿--网络切片技术(1)

0 背景 边缘计算可以支持就近的计算卸载&#xff0c;让数据在靠近数据源的设备上处理。对于边缘计算低时延的应用场景来说&#xff0c;网络性能的好坏&#xff0c;直接影响着卸载算法的整体耗时&#xff0c;决定着整个算法模型的可行性。因此如果想实现低时延卸载算法&#xff…

Go语言入门【7】指针

指针 在go语言中&#xff0c;每一个变量在运行时都会拥有一个地址&#xff0c;这个地址代表的就是变量在内存中的位置&#xff0c;而指针就是指向这个地址的变量。使用go语言中的指针很简单&#xff0c;只需要记住两个关键字符&#xff0c;&&#xff08;取地址符&#xff…

[附源码]java毕业设计在线二手车交易信息管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【App自动化测试】(九)移动端复杂测试环境模拟——来电、短信、网络切换

目录1. 发送短信2. GSM电话3. 设置模拟信号强弱4. 设置网速5. 设置网络连接类型前言&#xff1a; 本文为在霍格沃兹测试开发学社中学习到的一些技术写出来分享给大家&#xff0c;希望有志同道合的小伙伴可以一起交流技术&#xff0c;一起进步~ &#x1f618; 当我们使用模拟器来…

C#重启 --- 类和对象

​​​​​​ 1.类是抽象的&#xff0c;对象是具体的 2.类中有数据成员和方法成员&#xff08;数据成员是名词性的&#xff0c;方法成员是动词性的&#xff09; 1.类的关键字是class &#xff08;变量&#xff1a;首字母小写&#xff0c;方法&#xff1a;首字母大写&#x…

【毕业设计】机器学习的员工离职模型研究-python

目录 前言 课题背景和意义 实现技术思路 变量分析 数据导入 构建机器学习模型 1. 1 复制数据删除不需要的变量 1.2 列变量属性分类 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设…

Charles证书安装windows11抓包 Https协议

1、Charles 的CA证书 如果需要截取分析 Https 协议相关的内容&#xff0c;那么需要安装 Charles 的 CA 证书&#xff0c;需要在 win11 电脑上安装证书。 2、证书安装路径 点击 Charles 的顶部菜单&#xff0c;选择 “Help” –> “SSL Proxying” –> “Install Charl…

Revit修改:网格角度,体量轮廓,梁随斜板

一、Revit中使幕墙系统网格改变角度 绘制幕墙系统时&#xff0c;若幕墙系统出现如下图情况&#xff1a; 若想改变该网格的角度&#xff0c;使其与该幕墙上下边界平行或垂直则选中该幕墙&#xff0c;修改属性栏的中的网格角度。如下图所示&#xff1a; 修改完所需角度后&#xf…

web网页设计期末课程大作业——汉中印象旅游景点介绍网页设计与实现19页面HTML+CSS+JavaScript

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

基于FPGA的Hamiton方程--辛几何算法实现(全网唯一)

1、本文实验基于冯康院士的《哈密尔顿系统的辛几何算法》开展&#xff0c;链接&#xff1a;https://pan.baidu.com/s/1GM0Px7SLWBWzh4sXmAdcwg 提取码&#xff1a;fmkt 2、虽然题目写的是基于FPGA的求解&#xff0c;但实际上采用的是VHLS来实现的&#xff0c;最近根本不想写v…

m基于rbf神经网络和遗传算法优化的MIMO-OFDM系统信道估计算法matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 MIMO-OFDM的信道估计&#xff1a;时&#xff0c;频&#xff0c;空三个域都要考虑&#xff0c;尤其是在空域&#xff0c;不同天线发射的导频序列需要相互正交&#xff0c;否则在接收端无法…

使用星凸随机超曲面模型对扩展对象和分组目标进行形状跟踪(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

学习Python要学习哪些课程?

通过学习 Python数据分析与应用课程&#xff0c;可以掌握Python进行科学计算、可视化绘图、数据处理&#xff0c;分析与建模、构建聚类、回归、分类模型的主要方法和技能&#xff0c;并为后续相关课程学习及将来从事数据分析挖掘研究、数据分析工作奠定基础。 Python数据分析与…

进程互斥以及进程互斥实现方法(包含代码)

进程互斥有关概念&#xff1a; 两种资源共享方式&#xff1a; 1.互斥共享&#xff1a;一个时间段内只允许一个进程进行访问 2.同时共享&#xff1a;一个时间段内允许多个进程进行“同时”访问 临界资源&#xff1a;一个时间段内只允许一个进程进行访问的资源 访问临界区的…

第二章 爬虫的实现原理和技术(一)

2.1 爬虫的实现原理 不同类型的爬虫,具体的实现原理也不尽相同,但是这些爬虫之间存在许多共性。下面我将以通用爬虫与聚焦爬虫为例,具体来讲解爬虫是如何来运作的。 通用爬虫的工作原理 通用爬虫是一个自动提取网页的程序,能够从Internet上下载网页,是大多的搜索引擎的…

关于FFmepg的冷知识,这一篇就够了

每一个从事音视频技术开发的工程师对FFmpeg都不会感到陌生&#xff0c;即使是刚刚踏入这个行业的初学者&#xff0c;但对他们来说这条路上好像有着一条不可逾越的鸿沟&#xff0c;“雷神”和许多大神都总结过一些FFmpeg的学习方法&#xff0c;小编在这里为大家做一个整理&#…