如何使用 husky 检查 git 提交消息格式?
How can I use husky to check a git commit message format?
我正在尝试执行 git 提交消息策略以保持我的存储库干净整洁。我看过有关服务器端和客户端挂钩的官方文档,然后我碰到了 husky.
到目前为止我可以使用第一个但无法设置 husky,我还有很多东西要学。主要思想是能够在新工作站上工作,而无需手动设置任何客户端挂钩。
有人可以解释一下我如何设置 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
我已尝试将脚本添加到 package.json:
"scripts": {
... : ...,
"commitmsg": "sh hooks/commit-msg",
... : ...
}
钩子不起作用。所有消息通过。如果放入 .git/hooks 它会正常工作。
这是带有 package.json 的测试项目的屏幕截图,commit-msg 挂钩及其给出的错误。
相同的挂钩,放在 .git/hooks 文件夹中,工作正常。
首先检查
npm config get ignore-scripts # should be false
然后在 git 回购中:
npm install husky --save-dev
然后您可以将挂钩(这里是 pre-commit 和 pre-push)添加到 npm
(package.json
),这些挂钩定义的想法是 package.json
文件(git 回购源的一部分)。
尽管 Ron Wertlen npm
脚本除了 build/package 之外的任何内容都是 anti-pattern.
有关更好的做法,请参阅 Jerry Zheng's 。
您还可以声明现有的常规 bash 挂钩 (issue 92)
{
"scripts": {
"precommit": "sh scripts/my-specific-hook.sh"
}
}
然后您可以使用 validate-commit-msg
来验证您的提交消息。
add "commitmsg": "validate-commit-msg"
to your npm scripts in package.json
.
像这样:
首先,在您的 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",
....
}
}
}
然后,试一试...
似乎一切正常。
这是为了 commitlint
集成 as per the docs:
# Add hook
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit '
# or
yarn husky add .husky/commit-msg 'yarn commitlint --edit '
很有可能;你可以很容易地用这样的东西来定制它:
yarn husky add .husky/commit-msg 'sh scripts/my-specific-hook.sh '
使用 Husky 7+,您可以将以下内容添加到 .husky/commit-msg
文件:
#!/usr/bin/env sh
. "$(dirname -- "[=10=]")/_/husky.sh"
message="$(cat )"
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
我正在尝试执行 git 提交消息策略以保持我的存储库干净整洁。我看过有关服务器端和客户端挂钩的官方文档,然后我碰到了 husky.
到目前为止我可以使用第一个但无法设置 husky,我还有很多东西要学。主要思想是能够在新工作站上工作,而无需手动设置任何客户端挂钩。
有人可以解释一下我如何设置 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
我已尝试将脚本添加到 package.json:
"scripts": {
... : ...,
"commitmsg": "sh hooks/commit-msg",
... : ...
}
钩子不起作用。所有消息通过。如果放入 .git/hooks 它会正常工作。
这是带有 package.json 的测试项目的屏幕截图,commit-msg 挂钩及其给出的错误。
相同的挂钩,放在 .git/hooks 文件夹中,工作正常。
首先检查
npm config get ignore-scripts # should be false
然后在 git 回购中:
npm install husky --save-dev
然后您可以将挂钩(这里是 pre-commit 和 pre-push)添加到 npm
(package.json
),这些挂钩定义的想法是 package.json
文件(git 回购源的一部分)。
尽管 Ron Wertlen npm
脚本除了 build/package 之外的任何内容都是 anti-pattern.
有关更好的做法,请参阅 Jerry Zheng's
您还可以声明现有的常规 bash 挂钩 (issue 92)
{
"scripts": {
"precommit": "sh scripts/my-specific-hook.sh"
}
}
然后您可以使用 validate-commit-msg
来验证您的提交消息。
add
"commitmsg": "validate-commit-msg"
to your npm scripts inpackage.json
.
像这样:
首先,在您的 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",
....
}
}
}
然后,试一试...
似乎一切正常。
这是为了 commitlint
集成 as per the docs:
# Add hook
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit '
# or
yarn husky add .husky/commit-msg 'yarn commitlint --edit '
很有可能;你可以很容易地用这样的东西来定制它:
yarn husky add .husky/commit-msg 'sh scripts/my-specific-hook.sh '
使用 Husky 7+,您可以将以下内容添加到 .husky/commit-msg
文件:
#!/usr/bin/env sh
. "$(dirname -- "[=10=]")/_/husky.sh"
message="$(cat )"
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