You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python编写git pre-commit钩子无法获取入参问题咨询

问题原因

原生Git调用pre-commit钩子时,默认不会传入任何参数,你测试得到的sys.argv结果属于正常现象,和Python版本、Git客户端(Git Desktop/GitBash)无关。
你之前看到的能拿到入参的场景,通常属于两种情况:

  • 对方使用了第三方pre-commit管理框架(如Python生态常用的pre-commit工具链),这类框架会给自定义钩子脚本传入额外的自定义参数,不属于原生Git的行为
  • 对方使用的是其他类型的Git钩子,例如commit-msg(会传入提交消息文件路径)、pre-receive等,这类钩子本身就有Git默认传入的参数,和pre-commit的设计不同

解决方案

如果需要在pre-commit钩子中获取提交相关的信息,可以通过调用Git命令直接获取,不需要依赖入参:

示例:获取本次提交的修改文件列表

import sys
import subprocess

def main():
    # 获取暂存区中新增/修改的文件列表
    changed_files = subprocess.check_output(
        ["git", "diff", "--cached", "--name-only", "--diff-filter=ACM"],
        text=True
    ).splitlines()
    print("本次提交修改的文件:", changed_files)
    # 后续可以针对这些文件做格式检查、扫描等逻辑
    sys.exit(1)

if __name__ == "__main__":
    main()

如果需要传递自定义参数,可以通过环境变量实现:执行commit前先导出你需要的环境变量,在钩子脚本中直接读取os.environ即可获取对应值。

内容的提问来源于stack exchange,提问作者Joulain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:39:03