如何使用赫斯基检查git commit消息格式?

arj*_*jel 5 git pre-commit pre-commit-hook husky

我试图强制执行git commit消息策略,以使我的存储库保持整洁。我看过有关服务器端和客户端挂钩的官方文档,然后碰到了husky

到目前为止,我可以与第一个一起工作,但无法设置沙哑,我还有很多东西要学习。主要思想是能够在新的工作站上工作而不必手动设置任何客户端挂钩。

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

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

#!/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  
Run Code Online (Sandbox Code Playgroud)

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

"scripts": {  
  ... : ...,  
  "commitmsg": "sh hooks/commit-msg",  
  ... : ...  
}  
Run Code Online (Sandbox Code Playgroud)

挂钩不起作用。所有消息均通过。如果放在.git / hooks中,它将正常工作。

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

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

放在.git / hooks文件夹中的相同钩子也可以正常工作。

Jöc*_*ker 20

使用 Husky 7+,您可以将以下内容添加到.husky/commit-msg文件中:

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

message="$(cat $1)"
requiredPattern="^(add|cut|fix|bump|make|start|stop|refactor|reformat|optimise|document|merge) .*$"
if ! [[ $message =~ $requiredPattern ]];
then
  echo "-"
  echo "-"
  echo "-"
  echo " Wrong commit message! "
  echo "The commit message must have this format:"
  echo "<verb in imperative mood> <what was done>"
  echo "Allowed verbs in imperative mood: add, cut, fix, bump, make, start, stop, refactor, reformat, optimise, document, merge"
  echo "Example: add login button"
  echo "-"
  echo "Your commit message was:"
  echo $message
  echo "-"
  echo "For more information, check script in .husky/commit-msg"
  echo "-"
  exit 1
fi
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 5

第81期

首先,检查

npm config get ignore-scripts # should be false
Run Code Online (Sandbox Code Playgroud)

然后在git repo中:

npm install husky --save-dev
Run Code Online (Sandbox Code Playgroud)

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

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

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

{
  "scripts": {
    "precommit": "sh scripts/my-specific-hook.sh"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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


小智 5

像这样:

首先,在您的 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",
     ....
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

然后,尝试一下...

一切似乎都很好。

  • 这不会将参数传递给“my-specific-hook.sh”。 (2认同)