Как я могу использовать лайки для проверки формата сообщения git commit?
Я пытаюсь применить политику сообщений git commit, чтобы мои репозитории были чистыми и аккуратными. Я видел официальные документы о серверных и клиентских хуках, а затем натолкнулся на хаски.
До сих пор я мог работать с первым, но не мог настроить хаски, у меня еще есть чему поучиться. Основная идея заключается в том, чтобы иметь возможность работать на новой рабочей станции без необходимости вручную устанавливать какие-либо клиентские хуки.
Может кто-нибудь объяснить, как я могу настроить лайки для проверки моих сообщений коммитов или даже сделать пример?
Это мой коммит-зацепка 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 и ошибкой, которую он выдает.
Тот же хук, вставленный в папку.git / hooks, работает просто отлично.
4 ответа
Смотрите выпуск 81
Сначала проверь
npm config get ignore-scripts # should be false
Затем в git-репо:
npm install husky --save-dev
Затем вы можете добавить хуки (здесь pre-commit и pre-push) к npm (package.json
) идея заключается в том, что эти определения хуков являются версиями package.json
файл (часть ваших источников git-репо)
Вы также можете объявить существующие регулярные зацепки ( выпуск 92)
{
"scripts": {
"precommit": "sh scripts/my-specific-hook.sh"
}
}
Вы можете использовать validate-commit-msg
чтобы подтвердить ваше сообщение о коммите.
добавлять
"commitmsg": "validate-commit-msg"
на ваши сценарии npm вpackage.json
,
С 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
Как это:
Во-первых, добавьте сценарий проверки в ваш конский конфиг:
// 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
интеграция согласно документации :
# 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'