pre-commit 的配置文件
这个文件是 pre-commit 的配置文件,通常命名为 .pre-commit-config.yaml。pre-commit 是一个用于管理和维护多种预提交钩子的框架,旨在在代码提交(git commit)之前自动执行一系列检查和格式化任务,以确保代码质量和一致性。
文件用途
pre-commit 配置文件定义了一组钩子(hooks),这些钩子会在你执行 git commit 时自动运行。它们可以用于执行代码格式化、静态代码分析、检查潜在错误、确保代码风格一致等任务。通过使用 pre-commit,可以在代码进入版本库之前捕捉和修复问题,从而提高代码质量并减少代码审查中的问题。
使用方法
在文件顶部,有一些注释说明了如何使用和维护这个配置文件:
# 使用方法:
#
# pre-commit run -a
#
# 或者:
#
# pre-commit install # (在每次使用 git commit 时自动运行)
#
# 更新此文件的方法:
#
# pre-commit autoupdate
#
# 参考: https://github.com/pre-commit/pre-commit
具体步骤
-
安装
pre-commit如果尚未安装
pre-commit,可以使用pip进行安装:pip install pre-commit -
安装 Git 钩子
在项目根目录下运行以下命令,将
pre-commit钩子安装到 Git 中:pre-commit install这会确保每次执行
git commit时,定义的钩子都会自动运行。 -
手动运行所有钩子
如果想手动运行配置文件中定义的所有钩子,可以使用:
pre-commit run -a -
更新钩子版本
当需要更新配置文件中定义的钩子版本时,可以运行:
pre-commit autoupdate
文件内容解释
以下是文件的详细内容及其解释:
repos:# Standard hooks- repo: https://github.com/pre-commit/pre-commit-hooksrev: v3.4.0hooks:- id: check-added-large-files- id: check-case-conflict- id: check-merge-conflict- id: check-symlinks- id: check-xml- id: check-yaml- id: debug-statements- id: end-of-file-fixer- id: mixed-line-ending- id: trailing-whitespace- repo: https://github.com/psf/blackrev: 20.8b1hooks:- id: black- repo: localhooks:- id: clang-formatname: clang-formatdescription: Format files with ClangFormat.entry: clang-format-10language: systemfiles: \.(c|cc|cxx|cpp|frag|glsl|h|hpp|hxx|ih|ispc|ipp|java|js|m|proto|vert)$args: ['-fallback-style=none', '-i']- id: catkin_lintname: catkin_lintdescription: Check package.xml and cmake filesentry: catkin_lint .language: systemalways_run: truepass_filenames: false
1. repos 部分
repos 是一个列表,定义了多个仓库(repositories),每个仓库中包含了一组预定义的钩子。这些钩子可以来自第三方仓库,也可以是本地自定义的钩子。
a. 标准钩子仓库
- repo: https://github.com/pre-commit/pre-commit-hooksrev: v3.4.0hooks:- id: check-added-large-files- id: check-case-conflict- id: check-merge-conflict- id: check-symlinks- id: check-xml- id: check-yaml- id: debug-statements- id: end-of-file-fixer- id: mixed-line-ending- id: trailing-whitespace
repo: 指定钩子所在的仓库地址,这里使用的是pre-commit官方维护的标准钩子仓库。rev: 指定仓库的版本标签或提交哈希,这里使用的是v3.4.0版本。hooks: 列出具体要启用的钩子,每个钩子通过id指定。例如:check-added-large-files: 检查是否添加了过大的文件。check-case-conflict: 检查文件名大小写冲突。check-merge-conflict: 检查是否存在合并冲突标记。end-of-file-fixer: 确保文件以单个换行符结尾。trailing-whitespace: 检查并移除行尾空白。
b. Black 仓库
- repo: https://github.com/psf/blackrev: 20.8b1hooks:- id: black
repo: Black 是一个流行的 Python 代码格式化工具。rev: 指定 Black 的版本,这里是20.8b1版本。hooks: 启用black钩子,用于自动格式化 Python 代码。
c. 本地自定义钩子
- repo: localhooks:- id: clang-formatname: clang-formatdescription: Format files with ClangFormat.entry: clang-format-10language: systemfiles: \.(c|cc|cxx|cpp|frag|glsl|h|hpp|hxx|ih|ispc|ipp|java|js|m|proto|vert)$args: ['-fallback-style=none', '-i']- id: catkin_lintname: catkin_lintdescription: Check package.xml and cmake filesentry: catkin_lint .language: systemalways_run: truepass_filenames: false
repo: local: 表示这些钩子是本地自定义的,而不是来自远程仓库。hooks:-
ClangFormat 钩子:
id:clang-formatname: 钩子的名称,便于识别。description: 钩子的描述,说明其功能。entry: 指定要执行的命令,这里是clang-format-10,用于格式化代码。language: 指定钩子所用的语言环境,这里使用system,表示使用系统环境。files: 正则表达式,匹配需要格式化的文件类型,如.c,.cpp,.h等。args: 传递给clang-format-10的参数,这里设置了无回退风格并就地编辑文件。
-
Catkin Lint 钩子:
id:catkin_lintname: 钩子的名称。description: 检查package.xml和cmake文件。entry: 执行的命令,这里是catkin_lint .,用于检查当前目录下的 Catkin 包。language: 使用系统环境。always_run: 设置为true,表示无论文件是否变化,都要运行该钩子。pass_filenames: 设置为false,表示不传递文件名作为参数。
-
常见钩子功能详解
1. pre-commit-hooks 仓库中的钩子
check-added-large-files: 防止将过大的文件添加到版本库中。check-case-conflict: 检查文件名的大小写冲突,避免在大小写不敏感的文件系统中出现问题。check-merge-conflict: 检查文件中是否存在未解决的合并冲突标记。check-symlinks: 检查符号链接的有效性。check-xml: 验证 XML 文件的格式是否正确。check-yaml: 验证 YAML 文件的格式是否正确。debug-statements: 检查代码中是否包含调试语句(如print、console.log等)。end-of-file-fixer: 确保文件以一个换行符结尾,并移除多余的换行符。mixed-line-ending: 检查并报告文件中混合使用不同的行结束符(如 CRLF 和 LF)。trailing-whitespace: 移除行尾的多余空白字符。
2. black 仓库中的钩子
black: 自动格式化 Python 代码,使其符合 Black 的代码风格规范。
3. 本地自定义钩子
clang-format: 使用clang-format工具自动格式化 C/C++ 等代码文件。catkin_lint: 检查 ROS Catkin 包的package.xml和CMake文件,确保其配置正确。
总结
这个 pre-commit 配置文件通过定义多个钩子,帮助开发者在代码提交前自动执行一系列检查和格式化任务。这不仅提高了代码质量和一致性,还减少了代码审查中的常见问题。通过使用 pre-commit,团队可以确保所有提交的代码都符合预定义的标准和规范,从而提升整体开发效率和代码库的健康状况。
参考资源
- Pre-commit 官方文档: https://github.com/pre-commit/pre-commit
- Pre-commit Hooks 仓库: https://github.com/pre-commit/pre-commit-hooks
- Black 代码格式化工具: https://github.com/psf/black
- ClangFormat 工具: https://clang.llvm.org/docs/ClangFormat.html
- Catkin Lint 工具: https://github.com/catkin/catkin_lint
通过理解和配置这些钩子,可以显著提升项目的代码质量和开发流程的自动化程度。
相关文章:
pre-commit 的配置文件
这个文件是 pre-commit 的配置文件,通常命名为 .pre-commit-config.yaml。pre-commit 是一个用于管理和维护多种预提交钩子的框架,旨在在代码提交(git commit)之前自动执行一系列检查和格式化任务,以确保代码质量和一致…...
5G-A和F5G-A,对于AI意味着什么?
2024年已经过去了一大半,风起云涌的AI浪潮,又发生了不小的变化。 一方面,AI大模型的复杂度不断提升,模型参数持续增加,智算集群的规模也随之增加。万卡级、十万卡级集群,已经逐渐成为训练标配。这对智算网络…...
vue-实现rtmp直播流
1、安装vue-video-player与videojs-flash npm install vue-video-player -S npm install videojs-flash --save 2、在main.js中引入 3、组件中使用 这样就能实现rtmp直播流在浏览器中播放,但有以下几点切记,不要入坑 1.安装vue-video-player插件一定…...
论文阅读【时间序列】ModerTCN (ICLR2024)
【时间序列】ModerTCN (ICLR2024) 原文链接:ModernTCN: A Modern Pure Convolution Structure for General Time Series Analysis 代码仓库:ModerTCN 简易版本实现代码可以参考:(2024 ICLR)ModernTCN:A Mod…...
Robot Operating System——二维平面中的位置和方向
大纲 应用场景1. 移动机器人导航场景描述具体应用 2. 自动驾驶车辆控制场景描述具体应用 3. 机器人运动规划场景描述具体应用 4. 室内导航场景描述具体应用 5. 仿真环境场景描述具体应用 定义字段解释 案例 geometry_msgs::msg::Pose2D 是 ROS 2 中的一个消息类型,用…...
一文带你读懂分库分表,分片,Sharding的许多概念
一文带你读懂分库分表,分片,Sharding的许多概念 分库是将一个库拆分为多个库,分表就是将一个表拆分为多个表。分库分表有垂直拆分和水平拆分。垂直拆分一般是按照业务将表分到不同的库中(此种不在本发的讨论范围)。水平拆分是将表的数据拆分…...
算法实战(五):如何用学过的数据结构和算法实现一个短网址系统?
算法实战(五):如何用学过的数据结构和算法实现一个短网址系统? 在互联网时代,我们经常会遇到一些很长的网址,不仅不便于记忆,而且在一些场合下可能会受到长度限制。短网址系统就是为了解决这个问题而产生的。本文将介绍如何用学过的数据结构和算法实现一个短网址系统,…...
Python 环境搭建
Python 环境搭建 本章节我们将向大家介绍如何在本地搭建Python开发环境。 Python可应用于多平台包括 Linux 和 Mac OS X。 你可以通过终端窗口输入 “python” 命令来查看本地是否已经安装Python以及Python的安装版本。 Python下载 Python最新源码,二进制文档&am…...
uniapp vue3 使用echarts绘制图表 柱状图等
部分内容AI总结 Uniapp 使用 Vue3 和 ECharts 组件的总结 在 Uniapp 中使用 Vue3 和 ECharts 进行数据可视化是一种常见需求。以下将详细介绍如何在 Uniapp 项目中安装 ECharts 插件、在 main.js 中挂载 ECharts 以及一个简单的示例 demo。 1. 下载 ECharts 插件 在 Uniapp 中…...
字符串处理的艺术:深入探索charAt(), indexOf(), nextLine(), 和 next() 的应用与组合
摘要 本文旨在深入探讨Java中字符串处理的核心方法——charAt(), indexOf(), nextLine(), 和 next(),通过实例展示这些方法如何协同工作以解决复杂的字符串处理任务。我们将从基础概念出发,逐步构建到高级应用,包括字符串的遍历、搜索、读取…...
C#八股总结
重载和重写的区别 方法重载:在同一个类中定义多个同名但参数不同的方法。 方法重写:通过使用 virtual 和 override 关键字,实现基类和派生类之间的方法重写。 重载发生在同类中,重写发生在父子类中 重载方法名相同参数不同&#…...
iOS 中的 sqlite-shm 和 sqlite-wal 文件丢失
iOS 中的 sqlite-shm 和 sqlite-wal 文件丢失或损坏可能会导致 NSManagedObjectContext 的 performAndWait 方法抛出 NSInternalInconsistencyException 异常。这是因为这些文件在 SQLite 的 Write-Ahead Logging (WAL) 模式下起着关键作用,Core Data 依赖它们来确保…...
ubuntu22上C/C++程序使用weston+wayland+OpenGLES渲染
一,安装依赖软件:sudo apt install zlib1g-dev libssl-dev libgles2-mesa-dev libsystemd-dev libpng-dev libglib2.0-dev libwayland-dev weston libweston-9-dev 二,启动: # 运行weston weston -Swayland-1# 运行程序 ./yourp…...
打点 - 泛微 E-Cology WorkflowServiceXml
请求路径 /services%20/WorkflowServiceXml显示如下,漏洞可能存在 利用: 根据提示在 CMD 处输入 Memshell 注入内存马,并点击执行,成功注入 冰蝎配置,输入内存马地址 成功连接 命令执行...
Go语言接口与多态
Go语言虽然并非传统意义上的面向对象语言,但它通过接口(Interface)和匿名组合(Composition)等机制,实现了类似面向对象编程中的多态性(Polymorphism)。接口和多态性是Go语言中非常重…...
【ADC】SAR 型 ADC 和 ΔΣ ADC 的选型决策方法
本文学习于TI 高精度实验室课程,介绍如何选择 SAR 或 delta-sigma 型 ADC。 文章目录 一、选型决策树二、特定传感器的应用三、需要 DC 精度但分辨率较低的应用四、需要 DC 精度且分辨率较高的应用五、极低噪声的 DC 精密测量六、需要捕获瞬态信号值的应用七、需要高…...
探探Java与python中的闭包
说在前面:在计算机科学中,闭包是指一个函数以及其引用的周围环境(变量)所组成的整体。简单来说,闭包允许一个函数访问并操作其外部函数作用域中的变量,即使外部函数已经执行完毕。 Java函数式编程—闭包&am…...
LD2 Scalable Heterophilous Graph Neural Network with Decoupled Embeddings
Neurips 24 推荐指数: #paper/⭐⭐⭐ 领域:可扩展图,大图加速 整个文章的理论部分比较多,尽量尽我所能避开一些额外公式。详细文章,见链接 模型架构 如图,整个模型分为与计算和训练两部分。本文的精华在于…...
【Mysql】Mysql数据库基本操作-------DDL(上)
1、DDL解释 DDL(Data Definition Language),数据定义语言,该语言部分包括以下内容, (1)对数据库的常用操作 (2)对表结构的常用操作 (3)修…...
MySQL知识点复习 - 常用的日志类型
MySQL中常用的日志类型: 重做日志(redo log) 作用:确保事务的持久性。redo日志记录事务执行后的状态,用来恢复还未写入data file的已成功事务更新的数据。防止在发生故障的时间点,尚有脏页未写入磁盘&…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
