Github Desktop提交Ruby on Rails代码报undefined method 'keys'如何解决
Github Desktop提交Rails项目报commit-msg钩子错误解决方法
错误信息
提交时触发的报错如下:
.git/hooks/commit-msg:167:in `validate': undefined method `keys' for nil:NilClass (NoMethodError) from .git/hooks/commit-msg:211:in `<main>'
错误根因
这个报错和Github Desktop、Rails框架本身无关,是项目本地配置的Git commit-msg 提交信息校验钩子运行异常:脚本第167行尝试对一个空值(nil)调用keys方法,说明钩子预期要加载的配置对象、规则集没有被正确读取,拿到空值后直接崩溃,阻断了提交流程。
排查解决步骤
- 先验证仓库本身状态正常:打开项目根目录终端,执行带跳过校验参数的提交命令
git commit -m "你的提交说明内容" --no-verify,如果能提交成功,就可以确认问题完全出在钩子脚本上,不用排查Git权限、代码冲突、Github Desktop配置这类无关问题。注意:这个参数会跳过所有提交前校验,仅用来定位问题,不要长期用它绕过团队的提交规范要求。 - 检查钩子依赖的配置文件:绝大多数Rails项目的commit-msg钩子是做提交规范校验用的,常见配套工具包括overcommit、commitlint、husky等,先核对项目根目录下对应工具的配置文件是否存在、语法是否正确:比如
.overcommit.yml、.commitlintrc.*文件有没有YAML缩进错误、JSON语法错误,配置文件损坏/缺失会直接导致钩子读不到规则,返回空值触发报错。如果是配置写错,修正语法后重新提交即可。 - 核对钩子脚本的路径配置:直接打开
.git/hooks/commit-msg文件,定位到第167行附近,看脚本是在读取哪个对象的keys属性,往前追这个对象的赋值逻辑,重点看有没有写死绝对路径的情况——如果之前挪过项目文件夹、换过设备,写死的路径失效就会读不到配置文件,拿到空值,把路径改成相对项目根目录的相对路径即可修复。 - 重装修复损坏的钩子:如果是团队统一维护的钩子规则,不用手动改脚本,直接用对应工具重新生成钩子即可:用overcommit管理钩子的项目,根目录执行
overcommit --install即可重写所有钩子脚本;用husky管理钩子的前端配套项目,先执行npm install装全依赖,再跑npx husky install就能修复损坏的钩子文件。 - 不需要提交校验的话直接删除损坏钩子:如果没有强制提交规范的要求,直接删除
.git/hooks/commit-msg文件即可,Git找不到对应钩子脚本就会自动跳过这步校验,不影响正常的代码提交流程。
内容的提问来源于stack exchange,提问作者Angel
相关产品推荐
相关产品推荐

