Git Gui(Windows版)无法触发prepare-commit-msg钩子求助
问题分析与解决
你遇到的问题是Windows环境下Git Gui未触发prepare-commit-msg钩子,核心原因和解决办法如下:
核心原因
Windows平台上,Git Gui默认使用Windows原生命令行环境(如cmd.exe),而你的钩子脚本使用的是类Unix系统的#!/bin/sh shebang声明,Git Gui无法正确识别并调用bash执行该脚本,导致钩子不触发。
另外需要注意:Windows系统可能会自动给钩子文件添加.txt扩展名(比如变成prepare-commit-msg.txt),Git会忽略带扩展名的钩子文件,这也是常见的触发失败诱因。
解决办法
方法1:修改脚本的shebang行
将脚本开头的#!/bin/sh替换为Git自带bash的完整路径(根据你的Git安装路径调整),示例:
#!/C/Program\ Files/Git/bin/bash.exe # prepare-commit-msg hook echo $0 filename=$(date | sed 's/[^0-9]//g') # date touch $filename.txt # create a new file exit 0
注意路径中的空格需要用反斜杠转义,或者用引号包裹路径。
方法2:确保钩子文件无扩展名
在Windows资源管理器中开启「显示文件扩展名」选项,检查钩子文件名是否为prepare-commit-msg(无.txt或其他后缀),若有扩展名直接删除。
方法3:改用Windows原生脚本格式
如果不想依赖bash,可以将钩子改成批处理脚本(文件名仍为prepare-commit-msg),示例:
@echo off echo %0 for /f "tokens=*" %%a in ('date /t') do set dt=%%a set filename=%dt:/=-% set filename=%filename: =% type nul > %filename%.txt exit /b 0
内容的提问来源于stack exchange,提问作者SebastianRV
相关产品推荐
相关产品推荐

