news 2026/9/21 19:19:33

Gitmoji 提交规范实践指南:用 Emoji 标准化 Git Commit Message 与 gitmojis 数据包

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Gitmoji 提交规范实践指南:用 Emoji 标准化 Git Commit Message 与 gitmojis 数据包
  • 开发工具

【免费下载链接】gitmoji

An emoji guide for your commit messages. 😜

项目地址:https://gitcode.com/gh_mirrors/gi/gitmoji
点击查看免费下载

Gitmoji 是一套旨在标准化并解释 GitHub 提交信息(commit message)中 Emoji 用法的社区约定:通过为不同意图的提交分配含义明确的 Emoji,让提交历史无需阅读正文即可一眼识别每次提交的目的。本文以本仓库根目录 README.md 为主线,结合gitmojisnpm 数据包源码、JSON 数据与 JSON Schema,系统讲解 Gitmoji 约定的提交格式、命令行客户端gitmoji-cli的安装使用、npm 数据包与 HTTP API 的消费方式,以及数据校验与发布机制。读完本文,你将能在自己的项目中落地一套可复制、可校验、可持续维护的 Emoji 提交规范。

Gitmoji 是什么:用 Emoji 表达提交意图

在提交信息中使用 Emoji,提供了一种仅凭看 Emoji 就能识别一次提交的目的或意图的简单方式。由于 Emoji 种类繁多,容易各写各的,因此 Gitmoji 倡议建立一份统一指南,帮助大家更轻松、更一致地使用 Emoji。其核心理念可以概括为:

  • 约定优于随意:为「修 Bug」「加功能」「重构」「改文档」等高频场景固定对应的 Emoji;
  • 可读性优先:在历史记录、PR 列表、Git 工具界面中,Emoji 比纯文字更快被眼球捕捉;
  • 可编程化:Emoji 数据以结构化 JSON 发布,可供 CLI、CI 校验、编辑器插件等程序化消费。

本仓库即 Gitmoji 约定的官方数据与网站实现:gitmojis是发布到 npm 的数据包(见 packages/gitmojis/package.json,版本 3.15.0),仓库还包含基于 Next.js 构建的展示网站packages/website

标准提交格式:<intention> [scope?][:?] <message>

README 给出了一个可直接照搬进团队的提交格式模板:

<intention> [scope?][:?] <message>

三个组成部分的含义:

占位符必填说明
intention来自 Gitmoji 列表中的一个 Emoji,表达本次提交的意图
scope可选的字符串,为变更范围补充上下文信息(例如模块名、包名)
message对本次变更的简短说明

[:?]表示冒号为可选分隔符,因此下面几种写法都是合法的:

git commit -m "✨ Add user profile page" git commit -m "🐛(auth): Fix token refresh race condition" git commit -m "♻️(core): Extract cache layer"

对照本仓库的权威数据源 packages/gitmojis/src/gitmojis.json(共 64 条),常见意图与 Emoji 的对应关系包括:

  • 🎨Improve structure / format of the code —— 改善代码结构或格式;
  • ⚡️Improve performance —— 提升性能;
  • 🔥Remove code or files —— 删除代码或文件;
  • 🐛Fix a bug —— 修复 Bug;
  • Introduce new features —— 引入新功能;
  • 📝Add or update documentation —— 新增或更新文档;
  • 💥Introduce breaking changes —— 引入破坏性变更;
  • 🚀Deploy stuff —— 部署;
  • ♻️Refactor code —— 重构;
  • 🚨Fix compiler / linter warnings —— 修复编译或 Lint 告警;
  • 🧪Add a failing test —— 添加失败用例(TDD)。

使用命令行客户端 gitmoji-cli

为了从命令行直接使用 Gitmoji,官方提供了交互式客户端gitmoji-cli,它可以帮你把 Emoji 选择、格式化提交信息的过程变成引导式交互。全局安装命令(README 原文):

npm i -g gitmoji-cli

安装后即可在终端中通过交互界面挑选 Emoji 并组合出符合<intention> [scope?][:?] <message>格式的提交信息,避免手工记忆 Emoji 与意图的对应关系,也减少输入错误。需要说明的是,gitmoji-cli是独立于本仓库发布维护的配套项目,其完整子命令与配置项以其自身文档为准。

以 npm 包形式消费 Emoji 数据:gitmojis

Gitmoji 约定中的全部 Emoji 已被打包成一个 Node 模块发布,方便作为依赖引入到自己的工具链中。仓库内对应包的说明见 packages/gitmojis/README.md。

安装

npm i gitmojis

基本用法(ES Module)

import { gitmojis } from 'gitmojis' console.log(gitmojis)

输出为对象数组,每个元素形如:

[ { emoji: '🎨', entity: '&#x1f3a8;', code: ':art:', description: 'Improve structure / format of the code.', name: 'art', semver: null }, { emoji: '⚡️', entity: '&#x26a1;', code: ':zap:', description: 'Improve performance.', name: 'zap', semver: null }, // ... ]

字段语义与 TypeScript 类型

每个 Gitmoji 条目包含 6 个字段,其类型定义见 packages/gitmojis/src/index.d.ts:

字段类型说明示例
emojistringEmoji 的 Unicode 字符'🎨''⚡️'
entity`&#${string};`十六进制或十进制的 HTML 实体'&#x1f3a8;''&#128657;'
descriptionstring该 Emoji 的使用场景说明'Improve structure / format of the code.'
namestring语义化名称(kebab-case)'art''white-check-mark'
semver'patch' \| 'minor' \| 'major' \| null关联的语义化版本影响范围,未指定时为null'patch''minor'null
code`:${string}:`以短码形式格式化的字符':art:'':zap:'

其中semver字段是 Gitmoji 与语义化版本(SemVer)打通的关键:例如(新功能)标记为minor💥(破坏性变更)标记为major,而⚡️🐛🚑️等大量条目标记为patch,部分条目录为null(不涉及版本影响)。从数据结构可以推断,semver的设计意图是支持基于提交信息自动推断版本号变更级别的工具。

包入口与模块格式

gitmojis的入口实现见 packages/gitmojis/src/index.js:

import gitmojisJson from './gitmojis.json' assert { type: 'json' } export { default as schema } from './schema.json' assert { type: 'json' } export const gitmojis = gitmojisJson.gitmojis

也就是说,包对外导出两个成员:

  • gitmojis:直接取自gitmojis.json中的gitmojis数组;
  • schema:对应的 JSON Schema,可用于运行时校验数据合法性。

在 packages/gitmojis/package.json 中,包被声明为"type": "module",并通过exports字段同时提供 ESM 与 CJS 两个入口(dist/index.mjs/dist/index.cjs),types指向dist/index.d.ts,因此支持importrequire两种引入方式,并天然带 TypeScript 类型提示。构建工具链采用unbuild"build": "unbuild"),开发时用nodemon监听src目录自动重建。

数据合法性的双重保障

Gitmoji 数据不是手写即完事,而是有 schema 约束与自动化校验:

  1. JSON Schema:见 packages/gitmojis/src/schema.json,采用 JSON Schema draft 2020-12。它要求顶层对象必须有gitmojis数组,且每个条目必须包含emojientitycodedescriptionnamesemver六个字段,其中semver只能是"major""minor""patch"null;数组本身还要求minItems: 1uniqueItems: true,从结构上保证列表非空且不重复。
  2. CI 校验脚本package.json中提供了lint:jsonlint命令,用ajv-cli依据 schema 校验数据文件:
# 校验 gitmojis.json 是否符合 schema.json pnpm run lint:json # 在 JSON 校验基础上再执行 prettier 格式检查 pnpm run lint

这意味着任何新增或修改的 Emoji 条目,都必须同时通过 schema 语义校验与 prettier 格式检查才能合入。

通过 HTTP API 消费:curl 一行获取

如果你不希望以 npm 依赖的方式引入,也可以直接通过 HTTP API 消费同一份数据(README 原文):

curl https://gitmoji.dev/api/gitmojis

该接口返回与 npm 包一致的{ "gitmojis": [...] }JSON 结构。从仓库实现看,网站侧通过 packages/website/scripts/generate-api.js 在构建期静态生成该 API 的 JSON 文件:

const { gitmojis } = require('gitmojis') const fs = require('fs') const path = require('path') const outputDir = path.join(__dirname, '../public/api/gitmojis') fs.mkdirSync(outputDir, { recursive: true }) fs.writeFileSync( path.join(outputDir, 'index.json'), JSON.stringify({ gitmojis }, null, 2) )

即:构建时从gitmojis包读取数据,落盘到public/api/gitmojis/index.json,由静态站点托管。这样 API 与 npm 包共享同一数据源,保证多入口消费的一致性。此外,数据文件中还声明了"$schema": "https://gitmoji.dev/api/gitmojis/schema",让编辑器也可以直接按 schema 校验该 JSON。

在网站中集成:Gitmoji 展示与搜索

本仓库的网站包(packages/website)围绕这份 JSON 数据构建了完整的展示与搜索体验:

  • GitmojiList组件(packages/website/src/components/GitmojiList/index.tsx)负责渲染全部 Gitmoji 列表;
  • emojiColorsMap.ts(packages/website/src/components/GitmojiList/emojiColorsMap.ts)为不同 Emoji 提供展示色;
  • SearchParamsSync.tsx(packages/website/src/components/GitmojiList/SearchParamsSync.tsx)将搜索/过滤条件同步到 URL 查询参数,便于分享与书签;
  • 配套的单元测试覆盖了列表渲染与交互逻辑(如 packages/website/src/components/GitmojiList/tests/gitmojiList.spec.tsx)。

如果你要在自己的项目里做类似的 Emoji 展示页,可以直接以gitmojis包的gitmojis数组为数据源,配合description做搜索匹配、用code显示短码、用semver做版本影响标识。

仓库工程结构速览

本仓库采用 pnpm + Turbo 的 monorepo 组织方式(见 package.json、pnpm-workspace.yaml 与 turbo.json),包含两个工作区包:

  • packages/gitmojis:数据包本体,产出gitmojisschema两个导出;
  • packages/website:Next.js 展示网站,含页面、组件、测试与静态 API 生成脚本。

根目录package.json要求 Node 22 与 pnpm >= 8,并提供"dev": "pnpm turbo --parallel dev"一键并行启动所有包的开发模式。数据从 packages/gitmojis/src/gitmojis.json 单一事实源流出,npm 包、HTTP API、网站展示三条消费链路共用这一份数据,这是整个项目保持「一处维护、处处一致」的关键设计。

为项目添加 Gitmoji 徽章

如果你正在自己的项目中使用 Gitmoji,README 提供了官方的徽章代码,可以直接放在自己项目的 README 顶部(徽章指向 gitmoji 官网):

<a href="https://gitmoji.dev"> <img src="https://img.shields.io/badge/gitmoji-%20😜%20😍-FFDD67.svg?style=flat-square" alt="Gitmoji" /> </a>

该徽章使用 shields.io 动态生成,向读者传达「本项目遵循 Gitmoji 提交约定」这一信息。

贡献与许可

Gitmoji 欢迎社区参与:贡献指南、新增 Emoji 的流程(先开 issue 讨论、再提交 Pull Request 并附带数据更新)都定义在仓库的.github/CONTRIBUTING.md中,新增 Emoji 时必须同时更新 packages/gitmojis/src/gitmojis.json,并通过pnpm run lint的 schema 与格式校验。仓库代码以 MIT 协议开源发布。

小结

围绕一份结构化 JSON 数据,Gitmoji 生态打通了「约定 → 数据 → 工具 → 消费」的完整链路:<intention> [scope?][:?] <message>提供了统一的提交书写范式;gitmoji-cli解决了命令行下的交互式使用;gitmojisnpm 包与https://gitmoji.dev/api/gitmojisHTTP API 让任何语言、任何工具都能以结构化方式消费全部 Emoji 元数据;JSON Schema 与 ajv 校验保证了数据在合入前始终合法。无论你是想在团队内推行统一的提交规范,还是想基于 Emoji 数据构建自己的提交辅助或分析工具,都可以直接从本仓库的 gitmojis.json 与 schema.json 出发快速落地。

  • 开发工具

【免费下载链接】gitmoji

An emoji guide for your commit messages. 😜

项目地址:https://gitcode.com/gh_mirrors/gi/gitmoji
点击查看免费下载
上一篇:彻底解决!Vue3-Excel-Editor排序功能异常深度剖析与根治方案
下一篇:终极指南:如何使用tc-lib-pdf实现交互式PDF文档的JavaScript集成

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/21 19:02:49

Remote Server

Remote Server 【免费下载链接】Auto-claude-code-research-in-sleep ARIS ⚔️ (Auto-Research-In-Sleep) — Lightweight Markdown-only skills for autonomous ML research: cross-model review loops, idea discovery, and experiment automation. No framework, no lock-i…

作者头像 李华