Windows环境下Git commit-msg钩子无法运行问题求助
解决Windows下Git commit-msg钩子不运行的问题
核心原因
Windows系统没有chmod命令,Git在Windows下判断钩子是否可执行,不是靠权限位,而是看脚本类型和内容,另外你的git hook run命令用法也有误。
1. 调整脚本类型与内容
根据你用的脚本语言,选下面一种方式:
- 用批处理脚本(最稳妥,无需额外环境)
把.hooks/commit-msg改成.hooks/commit-msg.bat,内容用DOS命令编写。比如简单的验证示例:@echo off setlocal :: 读取提交信息文件内容 set "commit_msg_file=%~1" set "first_line=" < "%commit_msg_file%" set /p first_line= :: 验证提交信息开头是否符合规范(比如feat/fix/docs等前缀) echo %first_line% | findstr /r "^(feat|fix|docs|style|refactor|test|chore): " >nul if %errorlevel% neq 0 ( echo 错误:提交信息不符合规范,必须以feat/fix/docs等前缀开头 exit /b 1 ) exit /b 0 - 用Shell脚本(依赖Git Bash)
保留.hooks/commit-msg文件名(无后缀),但开头必须加shebang:
确保你的Git是通过Git Bash安装的,或者系统里能找到bash.exe(Git默认会把bash加到PATH里)。#!/bin/bash commit_msg_file="$1" first_line=$(head -n 1 "$commit_msg_file") if ! [[ "$first_line" =~ ^(feat|fix|docs|style|refactor|test|chore): ]]; then echo "错误:提交信息不符合规范,必须以feat/fix/docs等前缀开头" exit 1 fi exit 0
2. 确认钩子路径配置
执行以下命令,确认输出是.hooks:
git config --get core.hooksPath
如果不是,重新设置:
git config core.hooksPath .hooks
注意:必须在仓库根目录执行这个命令,确保相对路径生效。
3. 正确测试钩子
你之前的git hook run命令写错了,正确用法是直接指定钩子名称,Git会自动从core.hooksPath指定的目录找:
# 测试commit-msg钩子 git hook run commit-msg
如果要带测试的提交信息文件,先创建一个测试文件(比如test_msg.txt),然后执行:
git hook run commit-msg test_msg.txt
4. 额外检查项
- 确保
.hooks文件夹和钩子文件没有被Git忽略(检查.gitignore) - 如果用PowerShell脚本,需要修改系统执行策略(不推荐新手用,容易踩坑)
- 钩子文件的编码必须是UTF-8无BOM,否则可能出现执行错误
内容的提问来源于stack exchange,提问作者Barbosa B
相关产品推荐
相关产品推荐

