如何使设置pass_filenames:true的pre-commit钩子仅执行一次并传入所有文件名?
问题解答
可以实现钩子仅调用一次并传入所有文件名的需求,你当前的配置缺少了关键的批量处理参数。
问题原因
pre-commit 默认会将匹配的文件分成多个批次传递给钩子(主要是为了避免命令行参数过长的问题),这就是11个文件触发三次调用的原因。
解决方案
在钩子配置中添加 batch: true 字段,强制pre-commit将所有匹配的文件一次性作为参数传递给钩子脚本:
repos: - repo: local hooks: - id: ruff-format name: ruff-format entry: "bin/ruff-format" language: script pass_filenames: true batch: true # 开启批量传递所有文件 files: "src/python/|test/python/" types: [python]
额外注意事项
- 确保你的
bin/ruff-format脚本能够正确处理多个文件名参数(比如遍历所有传入的参数执行格式化逻辑)。 - 若文件数量极多(远超11个)导致命令行参数长度超出系统限制,pre-commit 仍会自动分批,但这种情况在当前场景下不会出现。
内容的提问来源于stack exchange,提问作者Zranz
相关产品推荐
相关产品推荐

