Git-Cliff:一个高度可定制的变更日志生成器
前言
开发前端项目的时候,偶然想自动生成版本号,结果就发现了standard-version这个玩意儿,没想到,版本控制竟然如此美妙!
但是如果是前后端分离的项目的话,用前端来管理整体的版本号与变更内容是不是就太离谱了。
然后就找了下单独根据Git提交记录生成变更内容的插件,前后端项目的版本号由我自己单独控制,你别说,还真有!
一起来看看Git-Cliff是怎么用的吧!
安装
Rust
因为Git-Cliff是基于Rust的,我们需要Rust环境,到Rust官网进行安装,参考Windows安装Rust环境(详细教程)。
Git-Cliff
执行以下命令进行安装:
1
cargo install git-cliff
初始化:到git仓库根目录执行:
小贴士:感觉它像是git的内置命令对吧,不对,是因为它遵循了git插件的命名规范,git-<插件名>,所以能直接找到
git-cliff
。1
git cliff --init
生成
cliff.toml
文件,用于定义变更文件规则,可以参考我的toml
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102# git-cliff 配置文件
# https://git-cliff.org/docs/configuration
#
# 以 "#" 开头的行是注释。
# 配置选项按表和键组织。
# 更多可用选项请参阅文档。
[changelog]
# 变更日志的标题模板
header = """
# 变更日志\n
本文件记录了本项目的所有重要变更。\n
"""
# 变更日志的内容模板
# https://keats.github.io/tera/docs/#introduction
body = """
{% if version %}\
## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
{% else %}\
## [未发布]
{% endif %}\
{% for group, commits in commits | group_by(attribute="group") %}
### {{ group | striptags | trim | upper_first }}
{% for commit in commits %}
- {% if commit.scope %}*({{ commit.scope }})* {% endif %}\
{% if commit.breaking %}[**破坏性变更**] {% endif %}\
{{ commit.message | upper_first }}\
{% endfor %}
{% endfor %}\n
"""
# 变更日志的页脚模板
footer = """
<!-- 由 git-cliff 生成 -->
"""
# 移除内容前后的空白
trim = true
# 后处理器
postprocessors = [
# { pattern = '<REPO>', replace = "https://github.com/orhun/git-cliff" }, # 替换仓库 URL
]
# 即使没有发布版本也渲染内容
# render_always = true
# 输出文件路径
# output = "CHANGELOG.md"
[git]
# 基于 https://www.conventionalcommits.org 解析提交信息
conventional_commits = true
# 过滤掉不符合规范的提交
filter_unconventional = true
# 将提交的每一行作为单独的提交处理
split_commits = false
# 提交信息的预处理正则表达式
commit_preprocessors = [
# 替换问题编号
#{ pattern = '$(\w+\s)?#([0-9]+)$', replace = "([#${2}](<REPO>/issues/${2}))"},
# 使用 https://github.com/crate-ci/typos 检查提交信息的拼写
# 如果拼写错误,会自动修正。
#{ pattern = '.*', replace_command = 'typos --write-changes -' },
]
# 提交信息的解析和分组规则
commit_parsers = [
{ message = "^feat", group = "🚀 新功能" },
{ message = "^fix", group = "🐛 Bug 修复" },
{ message = "^docs", group = "📚 文档更新" },
{ message = "^style", group = "🎨 代码样式" },
{ message = "^refactor", group = "🚜 代码重构" },
{ message = "^perf", group = "⚡ 性能优化" },
{ message = "^test", group = "🧪 测试相关" },
{ message = "^build", group = "📦 构建系统" },
{ message = "^ci", group = "🔧 CI 配置" },
{ message = "^chore", group = "⚙️ 杂项任务" },
{ message = "^revert", group = "◀️ 回滚变更" },
{ message = "^security", group = "🛡️ 安全相关" },
{ message = "^wip", group = "🚧 进行中" },
{ message = "^deps", group = "📦 依赖更新" },
{ message = "^init", group = "🎉 初始化" },
{ message = "^config", group = "⚙️ 配置变更" },
{ message = "^release", group = "🏷️ 版本发布" },
{ message = "^hotfix", group = "🔥 紧急修复" },
{ message = "^breaking", group = "💥 破坏性变更" },
{ message = ".*", group = "💼 其他" },
]
# 过滤掉未被提交解析器匹配的提交
filter_commits = false
# 按拓扑顺序排序标签
topo_order = false
# 按提交时间排序(oldest 或 newest)
sort_commits = "oldest"生成变更记录文档
1
git cliff -o CHANGELOG.md
参考文档
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 InsectMk的个人空间!
评论