Pre-commit 使用本地 Hook
Pre-commit 是一个用于管理和维护多种 Git Hook 的工具。它可以帮助我们在提交代码之前运行一些代码检查,以确保代码的质量。Pre-commit 支持多种语言和工具,包括 Python、JavaScript、Rust、Shell、Docker、Markdown 等等。一般来说,我们可以使用很多网上仓库中的 Hook,比如 pre-commit-hooks 里面的 Hook。当然,我们也可以自己编写 Hook,作为本地 Hook 使用。
安装 Pre-commit
首先,我们需要安装 Pre-commit。我们可以使用 pip 来安装 Pre-commit。
pip install pre-commit
初始化 Pre-commit
然后,我们需要在项目的根目录下初始化 Pre-commit。我们可以使用 pre-commit
命令来初始化 Pre-commit。
pre-commit install
这个命令会在项目的根目录下创建一个 .pre-commit-config.yaml
文件,这个文件是 Pre-commit 的配置文件,我们可以在这个文件中定义我们的 Hook。
使用 Pre-commit
最后,我们可以使用 Pre-commit。我们可以使用 pre-commit run
命令来运行 Pre-commit,它会自动运行我们的 Hook。
pre-commit run
这样,我们就可以在提交代码之前运行我们的 Hook 了。
本地 Hook
Pre-commit 支持本地 Hook,我们可以在项目中创建一个 .pre-commit-config.yaml
文件,然后在这个文件中定义我们的 Hook。这样,我们就可以在提交代码之前运行我们自己的 Hook 了。
创建 .pre-commit-config.yaml
文件
首先,我们需要在项目的根目录下创建一个 .pre-commit-config.yaml
文件。这个文件是 Pre-commit 的配置文件,我们可以在这个文件中定义我们的 Hook。
repos:
- repo: local
hooks:
- id: my-local-hook
name: My Local Hook
entry: scripts/my-local-hook.sh
在这个例子中,我们定义了一个本地 Hook,它的 id 是 my-local-hook
,名字是 My Local Hook
,入口是 ./scripts/my-local-hook.sh
。这个 Hook 的入口是一个 Shell 脚本,我们可以在这个脚本中定义我们的代码检查逻辑。
创建 my-local-hook.sh
文件
然后,我们需要在项目的根目录下创建一个 scripts
目录,并在这个目录下创建一个 my-local-hook.sh
文件。这个文件是我们的 Hook 的入口,我们可以在这个文件中定义我们的代码检查逻辑。
#!/bin/bash
echo "Running My Local Hook..."
# Add your code check logic here
在这个例子中,我们定义了一个简单的 Shell 脚本,它只是输出了一行信息。我们可以在这个脚本中添加我们的代码检查逻辑。
运行 Pre-commit
最后,我们可以运行 Pre-commit,它会自动运行我们的 Hook。
pre-commit run
这样,我们就可以在提交代码之前运行我们自己的 Hook 了。
注意事项
- entry 路径是相对于
.pre-commit-config.yaml
文件的路径。 - entry 脚本需要有可执行权限,可以使用
chmod +x scripts/my-local-hook.sh
命令添加可执行权限。 - entry 脚本不仅可以是 Shell 脚本,还可以是 Python 脚本、JavaScript 脚本等等。
- 可以在 entry 脚本中调用其他工具,比如
flake8
、black
、isort
等等,来进行代码检查。