14

我正在尝试执行 git commit 消息策略以保持我的存储库干净整洁。我看过关于服务器端和客户端钩子的官方文档,然后我碰到了husky

到目前为止,我可以使用第一个但无法设置哈士奇,我还有很多东西要学。主要思想是能够在新工作站上工作,而无需手动设置任何客户端挂钩。

有人可以解释我如何设置 husky 来检查我的提交消息,甚至举个例子吗?

这是我在文件夹中的 commit-msg 钩子project-root/githooks

#!/usr/bin/env ruby

message_file = ARGV[0]
message = File.read(message_file)

$regex = /([resolved|fixed]) #([0-9])* ([A-Z])\w+/

if !$regex.match(message)  
  puts "[POLICY] Your message is not formatted correctly!"  
  puts "Message format must be like:"  
  puts "resolved #123 Case title (for features)"  
  puts "fixed #123 Case title    (for bugs)"  
  puts "First letter of 'Case title' must be capitalized!"  
  exit 1  
end  

我尝试将脚本添加到 package.json:

"scripts": {  
  ... : ...,  
  "commitmsg": "sh hooks/commit-msg",  
  ... : ...  
}  

钩子不起作用。所有消息都通过。如果放入 .git/hooks 它可以正常工作。

测试项目中的 package.json 和 commit-msg 挂钩

这是一个带有 package.json、commit-msg 钩子和它给出的错误的测试项目的屏幕截图。

同样的钩子,放在 .git/hooks 文件夹中,工作得很好。

4

3 回答 3

6

第 81 期

首先,检查

npm config get ignore-scripts # should be false

然后在 git repo 中:

npm install husky --save-dev

然后,您可以将钩子(这里是预提交和预推送)添加到npm( package.json),想法是这些钩子定义是该package.json文件中的版本(您的 git repo 源的一部分)。

虽然,Ron Wertlen 评论npm,除了 build/package 之外的任何脚本都是反模式
请参阅Jerry Zheng答案以获得更好的做法。

https://camo.githubusercontent.com/89b1f62d0f2f8b73cad2c70faec7b45d9957c41f/68747470733a2f2f692e696d6775722e636f6d2f794844734d32522e706e67

您还可以声明现有的常规 bash 挂钩(问题 92

{
  "scripts": {
    "precommit": "sh scripts/my-specific-hook.sh"
  }
}

然后,您可以使用它validate-commit-msg来验证您的提交消息。

添加"commitmsg": "validate-commit-msg"到你的 npm 脚本中package.json

于 2017-01-22T06:21:04.433 回答
4

像这样:

首先,在您的 husky 配置中添加验证脚本:

// package.json
{
 ...
 "husky": {
  "hooks": {
     "pre-commit": "npm test",
     // if you use validate-commit-msg, this can be "validate-commit-msg"
+    "commit-msg": "sh scripts/my-specific-hook.sh",
     ....
  }
 }
}

然后,试一试...

一切似乎都很好。

于 2019-03-17T04:56:47.343 回答
0

这是根据文档commitlint进行集成:

# Add hook
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit $1'
# or
yarn husky add .husky/commit-msg 'yarn commitlint --edit $1'

最可能; 您可以使用以下内容轻松自定义它:

yarn husky add .husky/commit-msg 'sh scripts/my-specific-hook.sh $1'
于 2021-08-27T05:51:22.487 回答