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

Windows下Git pre-commit钩子报错:No such file or directory

解决Git提交模板强制保留的钩子错误问题

错误根源

你用错了Git钩子类型:pre-commit钩子不会接收提交消息文件作为参数,所以脚本里的$1是空值,导致cat ''和写入空路径的报错。pre-commit钩子的作用是在提交前检查代码(比如语法校验、单元测试),和提交消息完全无关。要处理提交消息,必须用commit-msg钩子。

解决方案

  1. 替换钩子文件
    删除.git/hooks/pre-commit,在同一目录下创建commit-msg文件(注意无后缀)。

  2. 写入正确的钩子脚本
    下面的脚本会验证提交消息是否包含预定义模板,若不包含则强制用模板覆盖(也可改成提示错误并终止提交,看注释):

    #!/bin/bash
    
    # 预定义模板文件路径
    commit_msg_template="/d/gitTest/.gitmessage"
    required_content=$(cat "$commit_msg_template")
    
    # 读取用户提交的消息文件
    user_commit_msg_file="$1"
    user_content=$(cat "$user_commit_msg_file")
    
    # 检查提交消息是否包含模板内容
    if ! grep -qF "$required_content" "$user_commit_msg_file"; then
        # 强制用模板覆盖提交消息
        echo "$required_content" > "$user_commit_msg_file"
        # 若要提示用户并终止提交,替换上面一行为:
        # echo "错误:提交消息必须保留预定义模板内容,提交已终止" >&2
        # exit 1
    fi
    
  3. 添加可执行权限
    在Git Bash中进入仓库目录,执行命令给钩子加权限:

    chmod +x .git/hooks/commit-msg
    
  4. 验证效果
    执行git commit,编辑提交消息后保存,钩子会自动确保模板内容被保留(或触发错误提示)。

补充说明

你的路径写法/d/gitTest/.gitmessage在Git Bash中是正确的Windows路径映射,之前的报错和路径无关,完全是钩子类型误用导致的参数为空问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:33:29