用途:指导用 Conventional Commits 规范书写 commit,并据此机械生成 CHANGELOG 与 semver 标签,避免手写 CHANGELOG。适用于新仓库搭建发布流程、既有仓库统一 commit 格式、按语言选择 changelog 工具、自动化 tag 与 CHANGELOG 管理。
主要能力:说明 commit 格式 <type>[scope]: <subject>,列出 feat/fix/perf/refactor/docs/style/test/build/ci/chore/revert 各 type 对应的 semver bump 与是否进入 CHANGELOG;说明 breaking change 的两种写法(footer 的 BREAKING CHANGE: 或 type 后加 !);给出 Keep a Changelog 的 Added/Changed/Deprecated/Removed/Fixed/Security 六段结构;说明 v1.2.3 形式的 annotated tag 与 pre-release 标签。
工具选型:release-please(多语言、Release PR 自动生成、支持 monorepo)、changesets(npm 专用、手动记录)、conventional-changelog-cli(语言无关、仅生成 CHANGELOG)、git-cliff(Rust 编写、TOML 高定制)、towncrier(Python、news fragment)、auto(label 驱动)。资料给出各工具对应语言、是否生成 CHANGELOG、是否 bump version 及优缺点。
使用方式:资料包含 release-please 的 release-please-config.json、.release-please-manifest.json 与 GitHub Actions 工作流示例;git-cliff 的 cliff.toml 配置与命令 git-cliff --output CHANGELOG.md、git-cliff --unreleased --prepend CHANGELOG.md;conventional-changelog-cli 命令 conventional-changelog -p angular -i CHANGELOG.md -s -r 0;commitlint 与 commitizen 的安装配置;cargo-release 与 git-cliff 的 hook 结线。
限制与注意:资料指出 release-please 在 PR merge 时打 tag,手动 tag 会冲突;CHANGELOG 手改会导致下次生成 drift;BREAKING CHANGE 写在 subject 不会被识别;chore 不会触发 bump;规约违规 commit 会被工具忽略,无需 rebase 重写历史。具体价格、平台支持范围等资料未提供。