根据Git Commit生成Change log
始末
在看到曹大的一篇微信文章,是读书的一篇总结,其中就有写到关于Change log文档的问题,文章中有提到说国外很多开源项目,都是根据commit自动维护的,而国内还没有普及这种。
我感觉这个倒是触及了我的知识盲区的,之前确实没了解过,借此我去研究了一下,亲身尝试下来,还是挺方便的。
例如:openui5,可以非常方便的在网页中查看release note,releasenotes。
Git 命令
既然国外都有很多在这样做了,那这方面的资料绝对不少,果不其然:
Generating release notes from git commit messages using basic shell commands (git/grep)
根据特定的Label进行聚合,查询tag与tag之间的提及。
1 | #[INTERNAL]用于内部项目的修改,比如自己的internal包git commit -m“[INTERNAL] my internal change” |
使用命令:
1 | git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"%s" -i -E --grep="^(\[INTERNAL\]|\[FEATURE\]|\[FIX\]|\[DOC\])" |
仅导出特定的Label
1 | git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"%s" -i -E --grep="^(\[INTERNAL\]|\[FEATURE\]|\[FIX\]|\[DOC\])*\[FEATURE\]" |
指定两个Label
1 | git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"%s" -i -E --grep="^(\[INTERNAL\]|\[FEATURE\]|\[FIX\]|\[DOC\])*\[FEATURE\]|\[FIX\]" |
$(git describe --tags --abbrev=0)…HEAD
$(git describe --tags --abbrev=0):提取最近的一次tag
HEAD:则是最新的Commit
此段含义:最近的tag到最新的Commit的期间
也可以直接指定,v0.0.01…v1.0.01
正则的解释:
grep
先获取到整体以Label开头的commit log,包含多个Label都可以(正则的*
),例如[INTERNAL][TEST]
,后一部分再把特定部分的Label捞出来。
为什么要这么做呢?
当我们获取:--grep="^(\[FEATURE\])"
时,我们获取到:
1 | [FEATURE] Supports display of system and app information on Generic Tile |
像这种commit是获取不到的:
1 | [INTERNAL][FEATURE] sap.m.MultiComboBox: Keyboard Handling aligned |
^(\[INTERNAL\]|\[FEATURE\]|\[FIX\]|\[DOC\])*
则会将如下信息也一并获取到,其并不是我们所想要的。
1 | Merge "[INTERNAL] server: Update npm dependencies and enable CSP target level 3" |
而使用^(\[INTERNAL\]|\[FEATURE\]|\[FIX\]|\[DOC\])*\[FEATURE\]
,则可以先获取到以Label开头的commit,再把所有包含[FEATURE]
的commit一并抓取到。
Commit Template
通过Label聚合,那有时候在commit的时候并不知道这些Label,那可以借助commit模板来达成这个提醒的目的。
1 | git config --global commit.template /home/yu/git-commit-template.txt |
这个文件是要一直存在的,否则git会找不到。
git commit时,如图中效果:
其他
果不其然,Github
有现成的工具,也更为强大的工具:
https://github.com/search?q=Changelog
本文标题:根据Git Commit生成Change log
文章作者:小师
发布时间:2021-04-19
最后更新:2022-05-04
原始链接:chunlife.top/2021/04/19/根据Git-Commit生成Change-log/
版权声明:本站所有文章均采用知识共享署名4.0国际许可协议进行许可