JiFu's Wiki JiFu's Wiki
首页
  • HTML
  • JavaScript
  • NodeJS
  • Vuejs
  • 微信小程序
  • Python
  • 数据库
  • 中间件
  • 算法
  • 软件工程
  • Wordpress
  • iOS开发
  • Android开发
  • Linux
  • Windows
  • MacOS
  • Docker
  • Vim
  • VSCode
  • Office
  • 其他
  • Photoshop
  • Sketch
  • Mac
  • 游戏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
首页
  • HTML
  • JavaScript
  • NodeJS
  • Vuejs
  • 微信小程序
  • Python
  • 数据库
  • 中间件
  • 算法
  • 软件工程
  • Wordpress
  • iOS开发
  • Android开发
  • Linux
  • Windows
  • MacOS
  • Docker
  • Vim
  • VSCode
  • Office
  • 其他
  • Photoshop
  • Sketch
  • Mac
  • 游戏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • DevOps介绍
  • Linux

  • MacOS

  • Windows

  • Docker

  • Vim

  • VSCode

  • Office

  • 其他

    • Wiki.js安装手册
    • Vuepress手册
    • git submodule在项目中的使用
    • ffmpeg命令手册
    • git pre-commit使用
      • 安装
      • 设置
      • 使用
      • 脚本
    • alfred插件推荐
    • Git中.gitignore无效的解决办法
    • Git忽略提交规则 - .gitignore配置总结
    • screenFetch 命令行信息截图工具
    • Axel:命令行下轻量级多线程下载程序
    • Inxi:一个功能强大的获取 Linux 系统信息的命令行工具
    • Linux下Aria2下载器的安装及配置
    • Chrome浏览器怎么清理单个页面缓存
    • MacOS软件私人配置
  • 运维
  • 其他
JiFu
2024-03-27
目录

git pre-commit使用

# Git hook

Git能在特定的重要动作发生时触发自定义脚本钩子。钩子分为两组:

  1. 客户端钩子:pre-commit, prepare-commit-msg, commit-msg, post-commit等,主要在服务端接收提交对象时、推送到服务器之前调用。

  2. 服务器钩子:pre-receive, post-receive, update等,主要在服务端接收提交对象时、推送到服务器之前调用。 git hooks位置位于每个git项目下的.git/hooks目录里,进去后会看到这些钩子的官方示例,都是以.sample结尾的文件,这些示例脚本是不会执行的,去掉.sample后缀可激活该钩子脚本。

# pre-commit说明

pre-commit预提交,是git hooks中的一个钩子,由git commit命令调用,可以通过--no-verify参数绕过调用pre-commit。通常用于在提交代码前,进行代码规范检查。

但是如果直接通过编写git hooks脚本来实现代码规范检查,会有如下的一些问题:

规范越多,编写的脚本越复杂 本地的规范修改,没法方便的同步到项目中其他开发人员 不同语言,代码规范不一样,脚本设置都不同 那为了更方便的管理pre-commit的设置,于是有了一个同名的工具项目pre-commit,一个用于管理和维护多语言预提交挂钩的框架。官网地址:https://pre-commit.com/

# 安装

pip install pre-commit
1

# 设置

设置配置文件 pre-commit依赖项目根目录配置文件.pre-commit-config.yaml。需要手动在根目录创建此文件。

# 在根目录执行如下命令,生成一个默认的配置,python版本
pre-commit sample-config > .pre-commit-config.yaml
1
2

# yaml配置文件说明

.pre-commit-config.yaml配置详细说明

首先,是顶层的全局配置,配置项有如下这些:

repos (必需)存储库映射列表
default_language_version (可选)从语言到应该用于该语言的默认language_version的映射。这将只覆盖没有设置language_version的单个钩子。默认为:{}
default_stages (可选)钩子的stages属性的配置范围默认值。这将只覆盖没有设置stages的单个钩子。默认值:all stages
Files (可选)全局文件包含,正则匹配模版,1.21.0新配置,默认值:""
exclude (可选)全局文件排除,正则匹配模版,1.1.0版本新配置,默认值:^$
fail_fast (可选)设置为true时,预提交将在第一次失败后停止运行钩子。1.1.0版本新配置
minimum_pre_commit_version (可选)需要pre-commit的最小版本。1.15.0版本新配置

# 举例


# 设置默认的阶段为commit,只在提交时进行检查
default_stages:
- commit

# 设置默认的语言版本,你也可以在每个repos中单独设置language_version
default_language_version:
  python: python3.7

# 设置排除的文件,正则匹配,这个也可以在每个repos中的hooks脚本中单独配置,以灵活实现不同文件对不同规则的检测排除
exclude: "^$"

# 起码顶层配置,一般使用默认值即可。
# 这个repos配置下面的内容,就是最重要的核心配置,下面细说
repos:
- ......
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 使用

目录 .git/hooks/pre-commit

添加自动化脚本启动

# 脚本

# npm项目自动更新版本号

const fs = require('fs');

// 读取 package.json 文件
const packageJson = JSON.parse(fs.readFileSync('package.json'));

// 解析版本号
const versionParts = packageJson.version.split('.');
let patchVersion = parseInt(versionParts[2]);

// 自增补丁号
patchVersion++;

// 更新 package.json 中的版本号
packageJson.version = `${versionParts[0]}.${versionParts[1]}.${patchVersion}`;

// 写回 package.json 文件
fs.writeFileSync('package.json', JSON.stringify(packageJson, null, 2));

console.log('版本号已更新为:', packageJson.version);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#git#pre-commit
上次更新: 2024/03/27, 13:59:18
ffmpeg命令手册
alfred插件推荐

← ffmpeg命令手册 alfred插件推荐→

最近更新
01
Disable notification "to get future google chrome updates you'll need macos 10.13 or later" on mac
05-14
02
MacOS软件推荐
04-30
03
Debian Sway开发机安装手册
03-26
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Ji Fu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式