TL;DR:您可能想要检查gitchangelog 自己的更改日志或生成前一个更改日志的ASCII 输出。
如果您想从 Git 历史记录中生成变更日志,您可能需要考虑:
- 输出格式。(纯自定义 ASCII、Debian变更日志类型、Markdown、REST等)
- 一些提交过滤(您可能不希望看到更改日志中出现的所有拼写错误或外观更改)
- 在包含在更改日志中之前,一些提交文本争论不休。(确保消息标准化为首字母大写或最后一个点,但它也可能会删除摘要中的一些特殊标记。)
- 你的Git 历史兼容吗?大多数工具并不总是那么容易支持合并和标记。这取决于你如何管理你的历史。
或者,您可能需要一些分类(新事物、更改、错误修复等)。
考虑到这一切,我创建并使用了 gitchangelog。它旨在利用Git 提交消息约定来实现之前的所有目标。
必须有一个提交消息约定才能创建一个漂亮的更改日志(使用或不使用gitchangelog
)。
提交消息约定
以下是对考虑添加提交消息可能有用的建议。
您可能希望将您的提交大致分成大的部分:
- 按意图(例如:新建、修复、更改等)
- 按对象(例如:doc、包装、代码等)
- 按受众(例如:开发人员、测试人员、用户等)
此外,您可能想要标记一些提交:
- 作为不应输出到您的变更日志的“次要”提交(外观更改,评论中的小错字等)
- 如果您确实没有任何重大的功能更改,则作为“重构”。因此,这也不应该是显示给最终用户的更改日志的一部分,但如果您有开发人员更改日志,它可能会引起一些兴趣。
- 您也可以使用“API”标记来标记 API 更改或新的 API 内容...
- ...ETC...
尽可能多地针对用户(功能)来编写提交信息。
例子
这是git log --oneline
显示如何存储此信息的标准:
* 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
将生成一个完整的变更日志(具有分段支持New
,Fix
...),并且可以根据您自己的提交约定进行合理配置。它支持任何类型的输出,这要归功于通过 、 和 的模板化Mustache
,Mako templating
并且有一个用原始 Python 编写的默认遗留引擎;当前所有三个引擎都有如何使用它们的示例,并且可以输出更改日志作为显示在gitchangelog的 PyPI 页面上的日志。
我敢肯定你知道那里还有很多其他git log
的changelog
工具。
免责声明:我是gitchangelog的作者,我将在下面谈到它。