跳至内容

用于 Hugo 网站的 Git 提交规范

2026-08-24

随着,我对网站的修改量增加,发现 Git 提交信息异常混乱,包括不限于修改类型不一致、范围不正确等等。

这主要是我为了偷懒,采用了 AI 自动生成 Git 提交信息,很显然 AI 并没有因地制宜的处理,而是直接照搬主流的 Git 提交规范,忽略了我的网站不是一个开发项目,而是一个内容项目。

为了解决这个问题,我用 AI 专门为我的 Hugo 网站生成了一套 Git 提交规范。

Git 提交规范

提交消息结构

每条提交消息由两部分组成:Header(必填)、Body(选填)。

<type>(<scope>): <subject>	// Header

<body>						// Body
  • 各部分之间用空行分隔
  • Header 行不超过 72 个字符
  • Body 每行不超过 80 个字符

Type 类型

根据 Hugo 网站的特点,定义以下类型:

类型说明示例场景
post新增/更新文章发布新博客、修改已有文章
content非文章的页面内容变更修改关于页、友链页、归档页等独立页面
theme主题相关改动调整模板、布局、样式
config配置改动修改 hugo.toml、菜单、站点参数等
asset资源改动增删图片、字体、CSS、JS 等静态文件
fix修复问题页面渲染错误、链接失效、排版问题
chore构建/工具链变更CI/CD、Makefile、部署脚本
docs文档变更README、贡献指南等非网站内容
revert回滚提交撤销先前的某次提交

Scope 范围

scope 优先使用 Hugo 项目中的目录名,帮助快速定位改动位置:

posts/          博客文章
pages/          独立页面
layouts/        模板文件
static/         静态资源
assets/         资源文件(SCSS/JS等)
data/           数据文件
i18n/           国际化翻译
config/         配置目录
archetypes/     内容模板
themes/         主题文件
  • 文章类提交使用文章的 slug 作为 scope,例如 container-deployedge-computing
  • 当改动只涉及单个文件时,可直接用文件名作为 scope,例如 about.mdmain.css
  • 无法确定 scope 时可省略,但应先判断改动归属

Subject 描述

  • 以动词开头,使用祈使语气,末尾不加句号
  • 长度不超过 50 个字符
  • 优先使用中文,同一项目内保持一致
# 推荐
post(change-hugo-theme): 新增关于更换 Hugo 主题的文章
fix(posts/): 修复某某文章中的错别字
config(hugo.toml): 启用代码高亮并设置行号显示
theme(theme-name): 升级主题至 v2.1.0

# 不推荐
修改了一些东西                     缺少类型,描述模糊
post: 改文章                      主题行过于简略
fix(layouts): 修了个bug。         末尾多了句号

Body 详细说明

正文用于说明变更动机和上下文,不是必须的,但在改动较大时建议写上:

post(change-hugo-theme): 新增关于更换 Hugo 主题的文章

文章涵盖主题选择思路、从某主题迁移到某主题的完整过程、
旧文章 front matter 字段适配,以及自定义配色方案。
对比截图已添加至 content/posts/change-hugo-theme/ 目录。

建议

草稿文章

未发布的草稿在主题行中加 [draft] 前缀,方便在提交历史中一眼识别:

post(change-hugo-theme): [draft] 新增关于更换 Hugo 主题的文章

配图资源

文章配图建议与正文分开提交,或在主题行中明确标注:

post(change-hugo-theme): 添加文章配图

主题子模块

主题以 Git submodule 形式管理时,更新使用固定格式:

theme(theme-name): 更新 theme-name 主题 submodule 至 commit <hash>

提交频率建议

场景建议
写一篇文章文章内容一个提交,配图可合并或单独提交
批量修正错别字或排版合并为一个 fix 提交
主题大改按模板拆分,每个模板一个提交
配置文件调整一次调整对应一个提交

Commitlint 配置参考

可在项目根目录添加 .commitlintrc.yml 进行自动化校验:

extends:
  - '@commitlint/config-conventional'
rules:
  type-enum:
    - 2
    - always
    - [post, content, theme, config, asset, fix, chore, docs, revert]
  subject-max-length:
    - 2
    - always
    - 50
  header-max-length:
    - 2
    - always
    - 72

配合 husky 安装 Git hook 即可在提交时自动校验:

npm install -D @commitlint/cli @commitlint/config-conventional husky
npx husky install
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit ${1}'
最后更新于