如何创建和更新 changelog.md 文件?
时间: 2025-08-04 11:38:18 浏览: 10
<think>我们正在回答用户的问题:如何创建和维护 changelog.md 文件
根据引用内容,我们可以知道:
引用[1]提到了使用 conventional-changelog 工具生成 changelog 的命令,其中参数解释和如何生成所有commit历史的changelog。
引用[2]强调了自动化生成Changelog的好处以及为什么需要自动化。
引用[3]则提到了使用shell脚本生成CHANGELOG.md,并给出了commit的规范(包括type、scope、subject、body等)。
因此,我们可以将回答分为两个主要部分:
1. 手动创建和更新 changelog.md
2. 自动化创建和更新 changelog.md(重点,因为用户引用的内容主要关于自动化)
步骤:
一、手动创建和更新
- 创建:在项目根目录新建一个名为 CHANGELOG.md 的文件
- 更新:每次发布新版本时,按照一定的格式(如Keep a Changelog推荐的格式)手动添加变更内容
二、自动化创建和更新(基于工具和规范)
- 前提:采用规范的Git提交信息(如Conventional Commits)
- 工具:使用如 conventional-changelog 的工具来自动生成
具体步骤:
1. 初始化项目(如果还没有package.json,需要先初始化)
2. 安装 conventional-changelog-cli
3. 运行命令生成或更新changelog
根据引用[1]的命令:
生成最近一个tag之后的变更:conventional-changelog -p angular -i CHANGELOG.md -s
生成所有commit历史的changelog:conventional-changelog -p angular -i CHANGELOG.md -s -r 0
另外,引用[3]提到了commit规范,我们可以结合说明如何规范提交信息以便工具正确解析。
维护:
- 将生成changelog的命令集成到发布流程中(例如在npm version或打tag时自动执行)
- 或者使用持续集成工具(如GitHub Actions)在发布时自动更新changelog
注意:我们引用的内容中,引用[2]提到了利用Git和Bash脚本自动化,所以也可以简要提一下脚本方法,但引用中并没有给出具体脚本,所以我们可以根据引用[3]的规范写一个简单的脚本思路。
最后,生成相关问题。
回答结构:
1. 手动方法(简要)
2. 自动化方法(详细,包括工具使用和规范)
3. 维护建议(如何集成到工作流)
注意引用标记:在适当的地方标注引用[1]、[2]、[3]</think>### 如何创建和维护 changelog.md 文件
创建和维护 `changelog.md` 文件可分为手动和自动化两种方式,核心是确保变更记录清晰、规范且可持续更新。以下是详细步骤:
---
#### 一、创建 changelog.md 文件
1. **手动创建**
- 在项目根目录新建 `CHANGELOG.md` 文件
- 初始内容模板(推荐遵循 [Keep a Changelog](https://keepachangelog.com/) 规范):
```markdown
# Changelog
> 记录项目所有版本变更
## [Unreleased]
- 新增功能
- Bug 修复
## [1.0.0] - YYYY-MM-DD
### Added
- 初始版本发布
```
2. **自动化生成**(推荐)
使用工具如 `conventional-changelog` 生成初始文件:
```bash
# 安装工具
npm install -g conventional-changelog-cli
# 生成基于Angular提交规范的changelog
conventional-changelog -p angular -i CHANGELOG.md -s
```
参数说明:
- `-p angular`:使用 Angular 提交规范模板
- `-i CHANGELOG.md`:输出到指定文件
- `-s`:读写同一文件(避免重复生成)[^1]
---
#### 二、更新 changelog.md 文件
更新需结合 **Git提交规范** 和 **自动化工具**:
1. **Git提交规范(关键前提)**
每次提交需按规范格式编写信息[^3]:
```plaintext
<type>(<scope>): <subject>
// 空行
<body>
```
- **type**:提交类型(必选)
`feat`(新功能) | `fix`(Bug修复) | `docs`(文档) | `style`(格式) | `refactor`(重构)
- **scope**:影响范围(可选,如`login`, `api`)
- **subject**:简要描述(50字符内)
- **body**:详细说明(可选)
**示例提交**:
```bash
git commit -m "feat(login): 新增双因素认证" -m "为登录流程添加短信验证码功能"
```
2. **自动化更新流程**
- **生成新版本变更**:
```bash
# 仅生成最近一个tag后的变更
conventional-changelog -p angular -i CHANGELOG.md -s
```
- **生成所有历史变更**(首次建议):
```bash
conventional-changelog -p angular -i CHANGELOG.md -s -r 0
```
参数 `-r 0` 表示从头生成所有变更记录[^1]
- **集成到发布流程**(如 `package.json`):
```json
"scripts": {
"version": "conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"
}
```
3. **手动更新场景**
当提交未遵循规范时,需手动补充:
- 按版本分组(语义化版本 `主版本.次版本.修订号`)
- 分类记录变更(示例):
```markdown
## [2.1.0] - 2023-10-05
### Added
- 用户个人中心页面
### Fixed
- 修复支付接口超时问题
```
---
#### 三、维护最佳实践
1. **规范提交消息**:
使用 `commitlint` 工具强制校验提交格式:
```bash
# 安装校验工具
npm install @commitlint/cli @commitlint/config-conventional --save-dev
```
2. **自动化集成**:
- **Git Hooks**:通过 `husky` 在提交前自动校验格式
- **CI/CD**:在 GitLab/GitHub 流水线中自动生成 changelog 并推送[^2]
3. **版本发布时更新**:
每次打新 tag (`git tag v1.2.0`) 后立即更新 changelog
4. **审核机制**:
在合并请求(Merge Request)中检查 changelog 是否同步更新
> 💡 **重要提示**:自动化工具依赖规范的提交消息。若提交信息杂乱(如 `fix bug`),工具无法正确分类变更[^3]。
---
#### 自动化脚本示例
结合引用[2][3],用 Bash 脚本生成 changelog:
```bash
#!/bin/bash
# 生成最近版本变更
git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"- %s" > changes.tmp
echo "## [Unreleased]" >> CHANGELOG.md
cat changes.tmp >> CHANGELOG.md
rm changes.tmp
```
此脚本提取最新 tag 后的提交记录,写入 `Unreleased` 区域[^2][^3]。
---
通过规范提交 + 工具自动化,可高效维护 changelog.md,确保项目变更透明可追溯[^1][^2]。首次建议使用 `-r 0` 生成完整历史,后续通过版本发布自动更新。
阅读全文
相关推荐



















