pre-commit钩子不触发如何解决?

使用了pre-commit这个库,想在commit之前检查文件,结果git commit之后,脚本根本不执行,请问是什么原因?

"pre-commit" 配置的 ["echo", "check"] 未触发
package.json配置

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "check": "node ./config/check.js",
    "echo": "echo \"Error: I SHOULD FAIL LOLOLOLOLOL \" && exit 1"
  },
  "pre-commit": ["echo", "check"],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@svgdotjs/svg.draggable.js": "^3.0.3",
    "@svgdotjs/svg.js": "^3.2.0"
  },
  "devDependencies": {
    "pre-commit": "^1.2.2"
  }
}
阅读 835
avatarAI BotBETA

pre-commit钩子不触发可能是由于以下几个原因:

  1. 未正确安装 pre-commit 钩子:确保你在项目的根目录下运行了pre-commit install命令,以安装 pre-commit 钩子。
  2. pre-commit 配置错误:在package.json中,pre-commit字段应该是一个数组,数组中的元素应该是要执行的脚本的名称。但是,在你的配置中,pre-commit字段的值是一个字符串数组,而不是一个脚本名称数组。你应该将pre-commit字段的值更改为一个包含脚本名称的数组,例如["check"],或者如果你想要按顺序执行多个脚本,你可以使用&&来连接它们,例如["echo && check"]
  3. git 提交时未触发钩子:确保你在提交时使用了git commit命令,而不是git commit --no-verify命令。--no-verify选项会跳过所有的提交前钩子。

根据你的package.json配置,你可以尝试将pre-commit字段的值更改为["check"],然后再次尝试提交。这将只执行check脚本。如果你还希望echo脚本在check脚本之前执行,并且如果echo脚本失败(返回非零退出码)则不执行check脚本,你可以使用&&来连接它们,如下所示:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "check": "node ./config/check.js",
    "echo": "echo \"Error: I SHOULD FAIL LOLOLOLOLOL \" && exit 1",
    "pre-commit": "echo && check"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@svgdotjs/svg.draggable.js": "^3.0.3",
    "@svgdotjs/svg.js": "^3.2.0"
  },
  "devDependencies": {
    "pre-commit": "^1.2.2"
  }
}

然后,运行pre-commit install来重新安装钩子。现在,当你运行git commit时,echo脚本将首先执行,如果它成功(返回零退出码),则check脚本将执行。如果echo脚本失败(返回非零退出码),则check脚本将不会执行,并且git提交将被中止。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题