Git GUI触发prepare-commit-msg钩子失败:git: 'hook'不是git命令
Git GUI钩子报错解决指南
核心问题解答
不需要必须定义prepare-commit-msg钩子,Git的所有钩子都是可选功能,默认状态下没有任何强制启用的钩子要求。
报错原因
你使用的Git版本是2.34.1,而git hook run命令是Git 2.37版本才正式引入的新特性。Git GUI调用了这个你的Git版本不支持的命令,导致出现git: 'hook' is not a git command的错误。
解决方法
方法1:升级Git到兼容版本
这是最彻底的解决方案,步骤如下:
- 卸载旧版本Git:
sudo apt remove git - 添加Git官方PPA源:
sudo add-apt-repository ppa:git-core/ppa - 更新系统包列表并安装新版本Git:
sudo apt update && sudo apt install git - 验证升级成功:
git --version,确认版本≥2.37
方法2:修改Git GUI脚本适配旧版本Git
如果不想升级Git,可以手动修改Git GUI的钩子执行逻辑:
- 打开Git GUI的commit处理脚本,路径通常为
/usr/lib/git-core/git-gui/lib/commit.tcl - 搜索包含
git hook run的代码段,将其替换为旧版本Git兼容的钩子执行逻辑:set hook [file join [gitdir] hooks prepare-commit-msg] if {[file executable $hook]} { exec $hook $PREPARE_COMMIT_MSG [current_branch] } - 保存文件后重启Git GUI即可
方法3:临时应急方案
快速绕过报错,创建一个空的可执行钩子文件:
- 进入你的Git仓库目录:
cd /path/to/your/repository - 创建空的钩子文件:
touch .git/hooks/prepare-commit-msg - 添加执行权限:
chmod +x .git/hooks/prepare-commit-msg - 这个空钩子会被Git GUI调用但不执行任何操作,可暂时解决报错问题
内容的提问来源于stack exchange,提问作者Thomas Seehofchen
相关产品推荐
相关产品推荐

