Windows下Git pre-commit钩子报错:No such file or directory
解决Git提交模板强制保留的钩子错误问题
错误根源
你用错了Git钩子类型:pre-commit钩子不会接收提交消息文件作为参数,所以脚本里的$1是空值,导致cat ''和写入空路径的报错。pre-commit钩子的作用是在提交前检查代码(比如语法校验、单元测试),和提交消息完全无关。要处理提交消息,必须用commit-msg钩子。
解决方案
替换钩子文件
删除.git/hooks/pre-commit,在同一目录下创建commit-msg文件(注意无后缀)。写入正确的钩子脚本
下面的脚本会验证提交消息是否包含预定义模板,若不包含则强制用模板覆盖(也可改成提示错误并终止提交,看注释):#!/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添加可执行权限
在Git Bash中进入仓库目录,执行命令给钩子加权限:chmod +x .git/hooks/commit-msg验证效果
执行git commit,编辑提交消息后保存,钩子会自动确保模板内容被保留(或触发错误提示)。
补充说明
你的路径写法/d/gitTest/.gitmessage在Git Bash中是正确的Windows路径映射,之前的报错和路径无关,完全是钩子类型误用导致的参数为空问题。
内容的提问来源于stack exchange,提问作者user14013917
相关产品推荐
相关产品推荐

