怎样强制 commit 规范
怎样强制 commit 规范
想要规范每个人的 commit 习惯,光靠文档是不行的, 得强制执行, 有的人选择使用 git template 来规范队友的行为,其实之前我们团队也试过,最后的结果是: 并不是每个人都依照模板上的来, 这和文档约束没有啥区别,后来我们采用了 git hook 的方式,只要你不按照规定提交,就无法 commit,成效甚佳, 下面分享一下我自己平时使用的 hook。
安装 hook
- 在项目的根目录创建一个脚本 .githook.sh,内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/bin/bash
# 创建目标目录(如果不存在)
HOOK_DIR=".git/hooks"
mkdir -p "$HOOK_DIR"
# 写入钩子内容
cat > "$HOOK_DIR/commit-msg" <<'EOF'
#!/bin/bash
# 定义颜色常量
RED="\033[31m"
BLUE="\033[34m"
GREEN="\033[32m"
RESET="\033[0m" # 重置颜色
# 读取提交信息
commit_message=$(cat "$1")
# 定义正则表达式
regex="^(feat|fix|docs|style|refactor|test|chore|perf|revert)(\([a-zA-Z0-9]+\))?:[[:space:]]+"
if ! [[ $commit_message =~ $regex ]]; then
echo -e "${RED}提交信息不符合规范!${RESET}"
echo -e "${BLUE}规范: <类型>(<影响范围>): <描述>${RESET}"
echo -e "${BLUE}介绍:${RESET}"
echo -e "${BLUE}feat 新功能${RESET}"
echo -e "${BLUE}fix bug修复${RESET}"
echo -e "${BLUE}docs 文档变更${RESET}"
echo -e "${BLUE}style 格式调整(空格/分号等,不影响代码)${RESET}"
echo -e "${BLUE}refactor 代码重构(非功能/非bug修改)${RESET}"
echo -e "${BLUE}test 测试相关${RESET}"
echo -e "${BLUE}chore 构建/工具/配置等杂项${RESET}"
echo -e "${BLUE}perf 性能优化${RESET}"
echo -e "${BLUE}revert 回退提交${RESET}"
echo -e "──────────────────────────────"
echo -e "示例:"
echo -e "fix(uart): 修复uart接丢包的bug"
echo -e ""
echo -e "温馨提示: 冒号后面有空格哦!要求是英文冒号哦!"
echo -e ""
exit 1
fi
EOF
# 设置可执行权限
chmod +x "$HOOK_DIR/commit-msg"
# 验证安装
if [ -x "$HOOK_DIR/commit-msg" ]; then
echo -e "\033[32m✓ 钩子安装成功\033[0m"
echo "路径:$HOOK_DIR/commit-msg"
else
echo -e "\033[31m✗ 安装失败,请检查权限\033[0m"
exit 1
fi
- 运行这个脚本即可安装
./.githook.sh
如何使用?
正常 commit 就行,hook 会被调用检查,并给出 commit 规范,按照规范提交即可,否则永远 commit 失败。
本文由作者按照 CC BY 4.0 进行授权