如何制作一个检查提交消息的 git 预提交钩子?



我有一个 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

使用此结构的一些好处:

  • 自动生成更新日志。
  • 自动确定语义版本碰撞(基于登陆的提交类型(。
  • 向团队成员、公众和其他利益干系人传达变更的性质。

相关内容

  • 没有找到相关文章

最新更新