我有一个 git commit hook 脚本,它检查提交消息,如果消息不包含"update"一词,脚本应该拒绝提交。
#!/bin/bash
read -p "Enter a commit message: " message
if [[ ${message} != *"updated"* ]];then
echo "Your commit message must contain the word 'updated'"
else
git commit -m "$message"
fi
如果我尝试使用命令在本地存储库中推送某些文件,如何使此钩子自动执行
git commit -m "updated:something"
我的想法是让它不像"运行此脚本进行提交",而是当您打开控制台并尝试进行提交并输入提交消息时,脚本将自动检查您的提交消息并传递或拒绝它。
以commit-msg
为例。
#!/bin/bash
MSG="$1"
if ! grep -qE "updated" "$MSG";then
cat "$MSG"
echo "Your commit message must contain the word 'updated'"
exit 1
fi
chmod 755 commit-msg
并将其复制为.git/hooks/commit-msg
.
您可以将commitlint与 git 预提交钩子一起使用。
我发现使用它的最简单方法是通过预提交框架。 好处是您可以在提交之前轻松添加和自定义任何其他检查,这是支持的钩子列表。
使用pre-commit
添加commitlint
pip install pre-commit
或brew install pre-commit
创建您的.pre-commit-config.yaml
(如果需要,请检查并更新修订版(:
repos:
- repo: https://github.com/alessandrojcm/commitlint-pre-commit-hook
rev: v2.3.0
hooks:
- id: commitlint
stages: [commit-msg]
additional_dependencies: ['@commitlint/config-conventional']
args: ["--config",".commitlintrc.yaml"]
对于提交配置文件,您有很多选择.commitlintrc.yaml
:
rules:
body-leading-blank: [1, always]
body-max-line-length: [2, always, 100]
footer-leading-blank: [1, always]
footer-max-line-length: [2, always, 100]
header-max-length: [2, always, 100]
subject-case:
- 2
- never
- [sentence-case, start-case, pascal-case, upper-case]
subject-empty: [2, never]
subject-full-stop: [2, never, "."]
type-case: [2, always, lower-case]
type-empty: [2, never]
type-enum:
- 2
- always
- [build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test]
安装提交消息挂钩pre-commit install --hook-type commit-msg
然后你可以尝试git commit
.
你也可以直接通过 npm 安装提交,方法如下。
# Install commitlint cli and conventional config
npm install --save-dev @commitlint/{config-conventional,cli}
# Configure commitlint to use conventional config
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
我推荐常规提交格式。
提交消息的结构应如下所示:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
默认类型:build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test
例子:
feat(parser): add ability to parse arrays
docs: correct spelling of CHANGELOG
ci: add docker build
使用此结构的一些好处:
- 自动生成更新日志。
- 自动确定语义版本碰撞(基于登陆的提交类型(。
- 向团队成员、公众和其他利益干系人传达变更的性质。