用途
Changelog 面向软件项目的版本记录与发布管理,帮助开发者生成变更日志(Changelog)、撰写发布说明(Release Notes)、执行语义化版本管理(Semantic Versioning)以及自动化发布流程。适用于需要在每次版本发布时清晰记录变更、通知用户升级要点的团队。
主要能力
Keep a Changelog 格式
遵循 keepachangelog.com 的格式约定,分类按以下顺序排列:Added、Changed、Deprecated、Removed、Fixed、Security。最新版本排在最前,始终在顶部保留 [Unreleased] 段落,使用 ISO 日期(YYYY-MM-DD),每个版本链接到对应的 diff,面向人类而非机器书写。
Conventional Commits 规范
提交信息格式为 type[optional scope]: description,可选包含 body 和 footer。类型包括:feat(新功能,提升 MINOR)、fix(缺陷修复,提升 PATCH)、docs、style、refactor、perf、test、build、ci、chore。在 footer 中使用 BREAKING CHANGE: 或 feat!: / fix!: 简写表示破坏性变更(提升 MAJOR)。
语义化版本
版本格式为 MAJOR.MINOR.PATCH。补丁发布递增 PATCH,小版本发布递增 MINOR 并重置 PATCH,破坏性变更递增 MAJOR 并重置 MINOR 和 PATCH。支持预发布版本(alpha、beta、rc)及优先级规则:1.0.0-alpha.1 < 1.0.0-beta.1 < 1.0.0-rc.1 < 1.0.0。构建元数据(如 1.0.0+build.42)不参与版本比较。
版本升级命令示例:
# npm
npm version patch # 1.0.0 → 1.0.1
npm version minor # 1.0.0 → 1.1.0
npm version major # 1.0.0 → 2.0.0
npm version prerelease --preid=alpha # 1.0.0 → 1.0.1-alpha.0
npm version prerelease --preid=beta # 1.0.1-alpha.0 → 1.0.1-beta.0
npm version prerelease --preid=rc # → 1.0.1-rc.0
# Python (bump2version)
pip install bump2version
bump2version patch
bump2version minor
bump2version major
自动化变更日志工具
conventional-changelog:
npm install -D conventional-changelog-cli
# 生成变更日志(追加新条目)
npx conventional-changelog -p angular -i CHANGELOG.md -s
# 首次发布(从 git 历史重写整个变更日志)
npx conventional-changelog -p angular -i CHANGELOG.md -s -r 0
semantic-release:全自动流程,从提交信息判定版本、生成变更日志、发布并创建 GitHub release。需安装 semantic-release 及 @semantic-release/{changelog,git} 等插件,配置 .releaserc.json。
Release Please(GitHub Action):读取 conventional commits,自动创建发布 PR、升级版本、更新 CHANGELOG.md,并在合并时创建 GitHub release。
Changesets(适用于 Monorepo):
npm install -D @changesets/cli
npx changeset init
npx changeset # 交互式选择包与 semver 升级
npx changeset version # 升级版本并更新变更日志
npx changeset publish # 发布所有变更的包
git-cliff:
cargo install git-cliff # 或: npm install -g git-cliff
git cliff -o CHANGELOG.md # 完整变更日志
git cliff --latest -o CHANGELOG.md # 自上一个 tag 起
git cliff --unreleased --prepend CHANGELOG.md # 前置未发布内容
git cliff --config cliff.toml # 自定义配置
git cliff -o CHANGELOG.md --tag v2.0.0 # 将未发布内容标记为 v2.0.0
使用方式
Changelog 与 Release Notes 的区别
Changelog(CHANGELOG.md)是面向开发者的完整技术记录,保留在仓库中,按 semver 分类组织。Release Notes(GitHub Releases / 博客)是面向用户的精选摘要,突出要点、包含升级步骤、截图和迁移信息,按版本撰写。
撰写高质量条目
面向用户而非开发者,描述影响而非实现。示例:
# 不佳(提交信息风格)
- refactor: extract auth middleware to separate module
- fix: add null check to response handler
# 良好(面向用户的语言)
- 在网络不稳定时提升登录可靠性
- 修复服务器返回空响应时的崩溃
链接 issue 和 PR 以便追溯。
破坏性变更与迁移指南
每个破坏性变更需记录:变更内容、原因、迁移方法,给出修改前后对比与迁移代码示例。
弃用通知
至少在移除前一个主版本发布弃用公告,说明弃用内容、替代方案和移除时间。
Monorepo 变更日志策略
- 每包独立 CHANGELOG.md(Changesets 原生支持),适合独立版本化的包。
- 根目录单一 CHANGELOG.md,按包分组并用 scope 前缀,适合一起发布的紧耦合包。
- 混合模式:根日志记录跨包变更,各包记录自身变更。
GitHub Releases 集成
gh release create v2.1.0 --generate-notes # 从 PR/提交自动生成
gh release create v2.1.0 --title "v2.1.0" --notes-file notes.md # 自定义说明文件
gh release create v2.1.0-beta.1 --prerelease --title "v2.1.0 Beta" # 预发布
gh release create v2.1.0 --draft --generate-notes # 草稿发布
gh release upload v2.1.0 dist/*.tar.gz # 附加资源
gh release create v2.1.0 --generate-notes --notes-start-tag v2.0.0 # 自指定 tag 起
CI/CD 流水线中的变更日志
在 GitHub Actions 中 checkout 时设置 fetch-depth: 0 以获取完整历史,生成 RELEASE_NOTES.md 并创建 GitHub Release,可通过 git diff --name-only origin/main...HEAD 检查 PR 中是否更新了 CHANGELOG.md。
适用场景
- 需要系统化维护版本变更记录的软件项目。
- 希望通过提交规范自动生成变更日志和版本号的团队。
- 使用 Monorepo、需要多包独立版本管理的项目。
- 需要在 CI/CD 中自动化发布与变更日志生成的流程。
限制
资料未提供关于本技能自身的安装方法、运行环境依赖、授权许可、收费情况或平台支持的说明;上述工具均为资料中引用的第三方项目,具体版本与可用性暂未提供。