TL;DR:您可能需要检查gitchangelog自己的更改日志或生成前一个更改日志的ASCII输出。
如果你想从Git历史记录中生成一个更新日志,你可能需要考虑:
the output format. (Pure custom ASCII, Debian changelog type, Markdown, REST, etc.)
some commit filtering (you probably don't want to see all the typos or cosmetic changes getting in your changelog)
some commit text wrangling before being included in the changelog. (Ensuring normalization of messages as having a first letter uppercase or a final dot, but it could be removing some special markup in the summary also.)
is your Git history compatible?. Merging and tagging is not always so easily supported by most of the tools. It depends on how you manage your history.
可选地,您可能需要一些分类(新事物、更改、错误修复等)。
考虑到所有这些,我创建并使用了giitchangelog。它旨在利用Git提交消息约定来实现前面的所有目标。
要创建一个漂亮的变更日志,必须有提交消息约定(无论是否使用gitchangelog)。
提交消息约定
以下是关于在提交消息中添加哪些内容可能有用的建议。
你可能想把你的提交大致分成几个大的部分:
按意图(例如:新的、修复的、改变的等等)
按对象(例如:文档、打包、代码等)
按受众划分(例如:开发人员、测试人员、用户等)
此外,你可能想要标记一些提交:
作为“次要”提交,不应该输出到您的更改日志(装饰性的更改,注释中的一个小错别字,等等)。
作为“重构”,如果你真的没有任何重大的功能变化。因此,这也不应该是显示给最终用户的更改日志的一部分,但是如果您有一个开发人员更改日志,它可能会引起一些兴趣。
你也可以用“API”来标记API的变化或新的API内容…
等……
尽可能多地以用户(功能)为目标来编写提交信息。
例子
这是标准的git日志——一行显示如何存储这些信息:
* 5a39f73 fix: encoding issues with non-ASCII characters.
* a60d77a new: pkg: added ``.travis.yml`` for automated tests.
* 57129ba new: much greater performance on big repository by issuing only one shell command for all the commits. (fixes #7)
* 6b4b267 chg: dev: refactored out the formatting characters from Git.
* 197b069 new: dev: reverse ``natural`` order to get reverse chronological order by default. !refactor
* 6b891bc new: add UTF-8 encoding declaration !minor
如果你注意到,我选择的格式是:
{new|chg|fix}: [{dev|pkg}:] COMMIT_MESSAGE [!{minor|refactor} ... ]
要查看实际的输出结果,可以查看gitchangelog的PyPI页面的末尾。
要查看我的提交消息约定的完整文档,您可以查看引用文件gitchangelog.rc.reference。
如何从中生成一个精致的变更日志
然后,就可以很容易地进行一个完整的更改日志。您可以很快地编写自己的脚本,或者使用gitchangelog。
gitchangelog将生成一个完整的更改日志(支持新建、修复…),并且可以根据您自己的提交约定进行合理配置。它通过Mustache模板、Mako模板支持任何类型的输出,并有一个用原始Python编写的默认遗留引擎;当前所有三个引擎都有如何使用它们的示例,并且可以输出与gitchangelog的PyPI页面上显示的相同的更改日志。
我相信你知道还有很多其他的git日志变更工具。
免责声明:我是gitchangelog的作者,我将在下面谈到它。