How can I use husky to check a git commit message format?
With Husky 7+, you can add the following to .husky/commit-msg
file:
#!/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
See issue 81
First, check
npm config get ignore-scripts # should be false
Then in a git repo:
npm install husky --save-dev
You can then add hooks (here a pre-commit and pre-push) to npm
(package.json
), the idea being those hook definitions are versions in that package.json
file (part of your git repo sources).
Although, Ron Wertlen comments that npm
scripts for anything beside build/package are an anti-pattern.
See Jerry Zheng's answer for a better practice.
You can also declare existing regular bash hooks (issue 92)
{
"scripts": {
"precommit": "sh scripts/my-specific-hook.sh"
}
}
You can then use validate-commit-msg
to validate your commit message.
add
"commitmsg": "validate-commit-msg"
to your npm scripts inpackage.json
.
Like this:
First, add validate script in your husky config:
// 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",
....
}
}
}
And then, have a try...
Everything seems to be OK.