如何创建调用同仓库脚本的pre-commit.com钩子?
解决pre-commit钩子无法调用仓库内脚本的问题
问题原因
使用language: system时,pre-commit会在目标仓库(即你执行try-repo的仓库)的目录下执行命令,而你的my-script.py存放在钩子仓库里,因此找不到文件。
两种可行解决方案
方案1:使用language: script(推荐)
pre-commit内置的script语言专门适配简单可执行脚本场景,会自动处理钩子仓库内的文件路径。
- 给
my-script.py添加可执行权限:
chmod +x my-script.py
- 在
my-script.py开头添加shebang,指定Python解释器:
#!/usr/bin/env python
- 修改
.pre-commit-hooks.yaml配置:
- id: my-check name: my-check entry: my-script.py language: script files: '.*'
方案2:使用pre-commit模板变量(适配language: system)
pre-commit支持模板变量{{ repo }},它会被替换为钩子仓库的绝对路径,直接修改配置即可:
- id: my-check name: my-check entry: python args: ["{{ repo }}/my-script.py"] language: system files: '.*'
说明
上述两种方案都不需要像pre-commit-hooks仓库那样做安装配置,完全适配你简单脚本的使用场景。
内容的提问来源于stack exchange,提问作者V_V
相关产品推荐
相关产品推荐

