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

Windows下Git Hooks执行报错找不到php命令,但命令实际存在

Git钩子无法找到php.exe的原因与解决办法

问题背景

在Windows系统中配置了如下post-merge Git钩子:

#!/bin/sh

php artisan db:seed --class=PermissionSeeder

执行git pull操作时触发错误:.hooks/post-merge: line 3: php: command not found。但满足以下前提:

  • 在Windows终端(CMD/PowerShell)执行相同的php artisan命令可正常运行
  • php.exe已添加至用户级环境变量Path中

核心原因

Git钩子默认使用Git自带的MinGW/MSYS2 shell(即脚本开头#!/bin/sh指定的环境),这个shell的环境变量与Windows原生终端的环境变量不共享完全一致的配置:

  • 用户级Path变量可能未被MinGW shell正确加载,尤其是PHP路径是后续添加的情况下,Git的shell进程未同步最新的环境变量
  • MinGW shell对Windows可执行文件的解析逻辑不同,直接用php可能无法自动匹配到php.exe,需要明确指定后缀或完整路径

解决方法

方法1:指定PHP完整路径

将钩子中的php替换为php.exe的绝对路径,注意使用正斜杠或转义反斜杠:

#!/bin/sh

"C:/Program Files/PHP/php.exe" artisan db:seed --class=PermissionSeeder

方法2:手动注入PHP路径到环境变量

在钩子开头先把PHP所在目录添加到PATH,让MinGW shell能找到php命令:

#!/bin/sh

export PATH="/c/Program Files/PHP:$PATH"
php artisan db:seed --class=PermissionSeeder

方法3:改用Windows原生CMD执行钩子

修改脚本开头为#!/cmd.exe /c,让钩子使用Windows原生CMD环境,直接继承系统环境变量:

#!/cmd.exe /c

php artisan db:seed --class=PermissionSeeder

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:22:32