在Git中使用pre-commit

前言

  git-hooks 脚本对于在提交代码审查之前识别简单问题很有用。我们在每次提交时都运行钩子,以自动指出代码中的问题,例如缺少分号,尾随空白和调试语句。通过在代码审阅之前指出这些问题,代码审阅者可以专注于更改的体系结构,而不会浪费琐碎的样式问题。我们建立了预提交来解决钩子问题。它是用于预提交挂钩的多语言包管理器。您可以指定所需的挂钩列表,并且在每次提交之前,预提交可以管理用任何语言编写的任何挂钩的安装和执行。 pre-commit是专门为不需要root访问而设计的。如果您的开发人员之一未安装节点,但修改了JavaScript文件,则预提交会自动处理下载和构建节点,以在没有root的情况下运行eslint。
在此介绍的pre-commit只是git hook的一部分, git hook分客户端和服务端的,pre-commit属于客户端的。

   pre-commit是一段在git-hooks的任意阶段执行的代码,可以设置在git-hook的任意阶段执行。具体在那个阶段执行详见 stages 配置。

安装

在系统中安装

 

brew install pre-commit
# 或者
pip install pre-commit

# 查看版本
pre-commit --version
# pre-commit 2.12.1 <- 这是我当前使用的版本

 

在项目中安装

cd <git-repo>
#安装
pre-commit install
# 卸载
pre-commit uninstall

按照操作将会在项目的.git/hooks下生成一个pre-commit文件(覆盖原pre-commit文件),该hook会根据项目根目录下的.pre-commit-config.yaml 执行任务。

配置pre-commit

其实就是修改项目根目录下的.pre-commit-config.yaml文件,可选配置项如:

key 含义
id 钩子的 id - 在 pre-commit-config.yaml 中使用。
name 钩子的名称 - 在钩子执行期间显示。
entry

入口点 - 要运行的可执行文件。 entry还可以包含不会被覆盖的参数,例如entry: autopep8 -i.

language

钩子的语言 - 告诉预提交如何安装钩子。

files (可选:默认'')要运行的文件模式。
exclude

(可选:默认^$)排除匹配的文件files

types

(可选:默认[file])要在 (AND) 上运行的文件类型列表。请参阅 使用类型过滤文件

types_or

(可选:默认[])要运行的文件类型列表(或)。请参阅 使用类型过滤文件。 2.9.0 中的新功能

exclude_types

(可选:默认[])要排除的文件模式。

always_run

(可选:默认false)如果true即使没有匹配的文件,这个钩子也会运行。

fail_fast

(可选:默认false)如果true预提交将在此钩子失败时停止运行钩子。 2.16.0 中的新功能

verbose

(可选)如果true,即使钩子通过,也会强制打印钩子的输出。 1.6.0 中的新功能

pass_filenames

(可选:默认true)如果false没有文件名将传递给钩子。

require_serial

(可选:默认false)如果true此钩子将使用单个进程而不是并行执行。1.13.0 中的新功能

description

(可选:默认'')钩子的描述。仅用于元数据目的。

language_version

(可选:默认default)请参阅 覆盖语言版本

minimum_pre_commit_version

(可选:默认'0')允许指示最低兼容的预提交版本。

args

(可选:默认[])要传递给钩子的附加参数列表。

stages

(可选:默认(所有阶段))将钩子限制在commitmerge-commitpushprepare-commit-msgcommit-msgpost-checkoutpost-commitpost-mergepost-rewrite, 或manual阶段。请参阅 将挂钩限制在某些阶段运行

样例配置文件

demo配置

pre-commit-config.yaml

repos:
-   repo: https://github.com/psf/black
    rev: 20.8b1
    hooks:
    - id: black
      args: [--line-length=79]
-   repo: https://github.com/pycqa/isort
    rev: 5.8.0
    hooks:
      - id: isort
        name: isort (python)
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v2.2.3
    hooks:
    -   id: debug-statements
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v2.2.3
    hooks:
    -   id: flake8
-   repo: https://github.com/pre-commit/mirrors-mypy
    rev: 'v0.790'  # Use the sha / tag you want to point at
    hooks:
    -   id: mypy
        args:
        - --follow-imports=silent
        - --ignore-missing-imports
        - --show-column-numbers

 

 

 

 

posted @ 2022-04-26 11:02  二锅头不上头  阅读(3448)  评论(0编辑  收藏  举报