husky坑了一把git change-id

305 阅读2分钟

最近接手了一个新的项目,开始通过vue3.0搭建框架,并申请了gerrit代码库。框架基本功能搭建完成了,领导催的紧就开始进入研发阶段。然而,问题就来了,git commit都不会生成change-id。git push报错:

image.png

执行拉取远端的hooks目录的commit-msg文件后:

image.png

无法拉取hooks目录文件,从其他代码库复制了一个文件,问题还是没解决。这个问题立马让我们开始怀疑到了gerrit代码库的问题,立刻找gerrit负责的部门同事进行沟通,结果对方的操作都是正常的。而我们整个前端开发组的git提交都成了问题,对方的同事也不再搭理我们了。

我们开始各种百度:

  1. 可能是scp版本和gerrit版本兼容性问题(公司的gerrit系统已经很久没升级维护了),scp -p 需要改成scp -O

7DAD1407473B022EE9A7A9479A110573.jpg

  1. 可能是hooks目录里的commit-msg文件的执行权限:chmod u+x .git/hooks/commit-msg ... “一顿操作猛如虎,定睛一看原地杵” “让子弹飞一会”,问题先放一放

突然,同事说,重新拉取代码库就没问题,只要安装了依赖后就不行了。头顶突然闪了个“灯泡”。 问题解决的思路有了,估计是husky的问题,因为只有这货和git 提交有关系。

  1. 然后开始把husky依赖删除,相关配置也都删除,结果不行。
  2. 把node_modules都删除,还是不行

整个人都寂静了... 有种出师不利的感觉,和同事开玩笑“得烧香拜拜了”。

静下心来想想。感觉.git/hooks/commit-msg的目录有,但是git提交钩子没有去调用它执行。git config -l 看下git的相关配置,果然:

core.hookspath = .husky

这应该就是husky能够在git提交拦截钩子的基本原理吧!!!

我肯定没设置过这个,应该是husky插件执行的。查看下.husky目录里面没配置commit-msg文件。将这个参数改成.git/hooks,问题就这样解决了。另一个解决方案,就是将commit-msg文件放到.husky目录里。

纠其根本原因,就是框架没有完全搭建完,对husky插件没有做到完全了解。搭建vue2.0的时候用husky在提交的时候校验eslint,当时配置没有涉及.husky目录。可能是因为插件升级,配置也变了。还是要保持学习!!!