代码守护者:用git pre-commit-hook提升开发品质

同步发表在我的个人站点:https://panzhixiang.cn

在日常开发中,我们总是希望代码质量尽可能高,问题尽可能少。为了实现这一目标,git pre-commit-hook成为了我们的得力助手。通过在git commit操作前执行一系列检查,我们可以确保只有符合标准的代码才能被提交和推送到代码库。这种做法不仅有助于及时发现并解决问题,还能减少后续的code review工作量。

以下是我常用的pre-commit配置实践,它包括了代码风格检查、秘钥检查、代码格式化等关键步骤。通过这些步骤,我们可以在代码进入仓库之前,确保其符合团队的内部约定和策略

首先,需要在仓库的根目录下创建一个 .pre-commit-hook.yaml 文件, 我常用的配置如下:

---
exclude: "docs|node_modules|migrations|.tox"
default_stages: [commit]
fail_fast: false

repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.5.0
    hooks:
      - id: fix-encoding-pragma
        args: ["--remove"]
      - id: check-case-conflict
      - id: check-docstring-first
      - id: check-merge-conflict
        exclude: /README\.rst$|^docs/.*\.rst$
      - id: check-symlinks
      - id: check-xml
      - id: mixed-line-ending
        args: ["--fix=lf"]
      - id: detect-private-key
        exclude: ^xxxxxxx/secrets_detection\.py$ 

  - repo: https://github.com/myint/autoflake
    rev: v2.0.2
    hooks:
      - id: autoflake
        args: ["--in-place", "--remove-all-unused-imports", "--remove-duplicate-keys"]

  - repo: https://github.com/psf/black
    rev: 23.3.0
    hooks:
      - id: black

  - repo: https://github.com/pycqa/isort
    rev: 5.12.0
    hooks:
      - id: isort
        args: ["--profile", "black"]

  - repo: https://github.com/pycqa/flake8
    rev: 3.9.2
    hooks:
      - id: flake8
        additional_dependencies:
          - flake8-pie
          - flake8-print

  - repo: https://github.com/alessandrojcm/commitlint-pre-commit-hook
    rev: v9.11.0
    hooks:
      - id: commitlint
        stages: [commit-msg]
        additional_dependencies: ["conventional-changelog-conventionalcommits"]
        args: ["--config", "dev/ci/commitlint.yaml"]

  - repo: https://github.com/charliermarsh/ruff-pre-commit
    rev: "v0.0.260"
    hooks:
      - id: ruff
        args: 
          - --fix
          - --exit-non-zero-on-fix
          - --extend-select=E
          - --extend-ignore=E501
          - --extend-select=F
          - --extend-select=I
          - --extend-select=N
          - --extend-select=W
          - --extend-select=S
          - --per-file-ignores="**/test*.py:S101"
          - --extend-exclude=migrations

  - repo: https://github.com/Yelp/detect-secrets
    rev: v0.14.3
    hooks:
      - id: detect-secrets
        args: ['--baseline', '.secrets.baseline']

在pre-commit配置文件中,每个repo代表的是一个包含多个hooks的代码库,hooks可以理解为实际执行检查的工具或脚本。下面我会逐一解释配置文件中的repohook

  1. https://github.com/pre-commit/pre-commit-hooks:这个库包含了一些常用的hooks,用于完成很多基本的代码检查和修复。在配置文件里用到的hooks有:

    • fix-encoding-pragma:移除python文件中的编码声明。
    • check-case-conflict:检查是否存在因大小写造成的文件冲突。
    • check-docstring-first:检查模块、类或者函数是否以文档字符串开始。
    • check-merge-conflict:查找并报告git合并冲突。
    • check-symlinks:检查无效的符号链接。
    • check-xml:检查XML文件的有效性。
    • mixed-line-ending:检查并修复文件的行尾结束符。
    • detect-private-key:检测是否有私钥被提交。
  2. https://github.com/myint/autoflake:autoflake是一个Python工具,用于移除Python代码中未使用的导入,以及未使用的变量。配置中的hook有:

    • autoflake:移除所有未使用的导入,以及未使用的变量。
  3. https://github.com/psf/black:black是一个Python代码格式化工具,它会自动把你的代码格式化为符合PEP 8风格的代码。配置中的hook有:

    • black:对python代码进行格式化。
  4. https://github.com/pycqa/isort:isort是一个Python工具,可以对你的导入进行排序。配置中的hook有:

    • isort:对python代码的导入进行排序。
  5. https://github.com/pycqa/flake8:flake8是一个Python工具,它集成了pylint, pyflakes, pycodestyle等多个代码检查工具,可以对你的代码进行风格检查,错误检查等。配置中的hook有:

    • flake8:对python代码进行风格检查,错误检查。
  6. https://github.com/alessandrojcm/commitlint-pre-commit-hook:这个库提供了一个commitlint的pre-commit hook,用于检查你的commit message是否符合一定的规范。配置中的hook有:

    • commitlint:对commit message进行规范性检查。
  7. https://github.com/charliermarsh/ruff-pre-commit:这个库提供了一个ruff的pre-commit hook,其可以执行一些特定的代码检查。配置中的hook有:

    • ruff:执行一些特定的代码检查。
  8. https://github.com/Yelp/detect-secrets : 这个库提供了一个检查代码中是否包含账密的hook,可以在一定程度上避免开发人员把一些重要的账密提交到代码仓库中。

    • detect-secrets : 执行账密检查,除了支持默认的账密pattern,还支持自定义的pattern

这些hooks可以让你在提交代码之前就能发现并修复许多常见的问题,从而提高代码质量,节省Code Review的时间。

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: git:husky>pre-commit是一个Git钩子,它在提交代码前执行一些操作。通常用于代码风格检查、单元测试等操作,以确保代码质量和稳定性。Husky是一个Git钩子管理工具,可以方便地配置和管理Git钩子。 ### 回答2: Git是目前最流行的版本控制系统。在大多数项目代码的质量和一致性非常重要。在Git,可以使用钩子(Hooks)来确保代码的质量和一致性。其,pre-commit是常用的钩子之一。而Git: Husky则是Git常用的钩子管理工具。 Git: Husky是一个钩子管理工具,它允许开发者进行钩子配置,包括在提交代码之前运行何种指令。 具体地说,Git: Husky支持pre-commit钩子,使开发者可以在代码提交之前运行一些脚本,以确保提交的代码的质量和一致性。 pre-commit钩子可以被用于在代码提交之前运行某些指令。例如:静态代码分析工具,或者在代码提交之前运行的测试。因此,pre-commit钩子可以帮助开发者检查代码错误、格式、风格等。其过程是:在代码提交之前,pre-commit钩子运行拖的脚本,检查指定的问题并生成反馈,然后提交成功或失败。 总之,Git: Husky的pre-commit钩子是非常实用的工具。它可以让开发者在代码提交之前运行各种指令,以检查代码错误、格式、风格等。这有助于确保代码的质量和一致性,提高软件开发的效率和质量。所以,建议开发者在Git应用Git: Husky这一钩子管理工具,并使用pre-commit钩子确保代码的质量。 ### 回答3: Git是一款非常流行的版本控制工具,而husky>pre-commitGit的一个功能。Husky是一款JavaScript库,可以通过它来为Githooks添加JavaScript脚本,而pre-commitGit hook的一种类型,可以在commit前触发,并且可以运行一些脚本来帮助我们检查代码或其它工作。 在Git,pre-commit可以帮助我们做很多事情。例如,在代码提交之前,我们可以用pre-commit来对代码进行语法检查、格式化、代码审查、代码测试等。如果代码不符合某些规范,pre-commit还可以阻止代码提交,从而让我们更加规范地管理代码。 使用husky>pre-commit也非常简单。首先,我们需要在项目安装husky,然后在package.json文件设置pre-commit属性来配置pre-commit hook。在pre-commit属性,我们可以定义一个或多个需要执行的脚本,这些脚本会在commit之前执行。例如,我们可以在pre-commit加入代码格式化、代码审查和代码测试三个脚本,来确保我们提交的代码符合团队代码规范和质量要求。 总之,使用husky>pre-commit可以很好地帮助我们管理代码,确保代码的质量和一致性。这对于团队协作和代码维护都非常重要。同时,husky>pre-commit也可以提高我们的编码效率,让我们集精力在代码逻辑的编写上,而不是在代码格式、代码规范等上浪费时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值