git log 生成 changeLog

在进行git仓库的自动化管理时,发布前往往需要CI服务器自动生成 CHANGELOG.MD ,本文介绍如何自动changeLog.md自动生成的思路。

文章目录

  • git log 生成 changeLog
    • 生成流程
    • 关键问题
      • 使用 Git 自带的提交模板 Commit Template 来解决
        • 一、在工程的根目录下建立模板文件
        • 二、设置模板
        • 三、提交代码
      • 以工具的方式解决
    • 其他
      • git commit 格式基本规约:50/72格式化
      • git commit 风格
        • 模板:
        • 详细说明:

生成流程

  • 多次 commit -m “xxx”
  • 使用命令 git log > log 生成提交记录 log 文件
  • 处理 log 文件提取关心的信息, 然后转成 CHANGELOG.MD 文件.
    • 思路:(log文件中包含了所有的commit信息, 包括id, author, date以及comment等)
    • 前提:需要规范团队 git commit 的格式,才能保证自动生成

为什么基于commit的, 不是基于merge?
因为merge信息的获取需要使用gitlab提供的API, 不如获取commit来的方便('git log > log’一条命令即可)。大多数的开源仓库的changelog也是基于commit

关键问题

  • 如何规范团队 git commit 的格式?

这个问题并不是难题,关键是如何让团队成员容易掌握提交格式(简单通用),又方便程序处理(格式规范),我们可以联想到使用提交模板来解决。

  • 可以对 git 客户端进行增强(如 IDEA 的插件)

    • 但如果某些成员不用 IDEA ,那就不能轻松的记住提交格式

使用 Git 自带的提交模板 Commit Template 来解决

在命令行里 git commit 时,自动使用设置的编辑器打开设置的模板。开发者只需在预设模板的基础上添加或修改相应内容即可。(个人项目通常选择这种方式,简单)

一、在工程的根目录下建立模板文件

新建 gitcommit_template 文件,将希望的模板填充进去:

  • 例1:
[部门][项目]:
问题原因:
解决方法:
变更类别:
适用机型:
验证建议:
关联变更项:
任务 Id:
  • 例2:
# head: <type>(<scope>): <subject>
# - type: feat, fix, docs, style, refactor, test, chore
# - scope: can be empty (eg. if the change is a global or difficult to assign to a single component)
# - subject: start with verb (such as 'change'), 50-character line## body: 72-character wrapped. This should answer:
# * Why was this change necessary?# * How does it address the problem?# * Are there any side effects?## footer:
# - Include a link to the ticket, if any.# - BREAKING CHANGE# Commitizen

二、设置模板

有以下几种设置方式

  • 设置当前分支的提交模板
    git config commit.template [模板文件名]
    如:git config commit.template gitcommit_template

  • 设置全局的提交模板
    git config --global commit.template [模板文件名]
    如:git config --global commit.template gitcommit_template

  • 设置文本编辑器
    git config -global core.editor [编辑器名称]
    如:git config -global core.editor vim

三、提交代码

在命令行里 git commit 时,自动使用设置的编辑器打开设置的模板。在预设模板的基础上添加或修改相应内容即可。

然后git push提交到远程分支。

以工具的方式解决

模板的方式是git原生支持的,模板也可以自定义,定制性强,但与工具相比还不够方便,下面介绍几种这方面的工具。

  • conventional-changelog
  • commitizen
  • conventional-changelog-cli
  • standard-version

其他

git commit 格式基本规约:50/72格式化

  • 第一行不超过50个字符
  • 然后是空白行
  • 其余文字应以72个字符换行

原因:

  • 一些工具将第一行作为主题行,将第二段作为正文(类似于电子邮件)。若工具流行,那么该格式将流行。
  • git log不处理换行,因此如果行太长则很难阅读。
  • git format-patch --stdout 可以将提交转换为电子邮件。

git commit 风格

不同的人,有不同的表达风格,还有很多风骚的格式,如用 emoji 的, 用唐诗的, 用随机生成的. 风格没有对错, 只要能够体现出 commit 所做的修改即可。但规范 git commit 的风格有利于仓库的维护和新加入团队成员的快速上手。

目前比较建议的是,使用终端工具
commitizen/cz-cli + commitizen/cz-conventional-changelog + conventional-changelog/standard-version 一步解决提交信息和版本发布。

如果希望强制执行,可以在持续集成里面加入 marionebl/commitlint 检查 commit 信息是否符合规范。

目前规范使用较多的是 Angular 团队的规范, 继而衍生了 Conventional Commits specification. 很多工具也是基于此规范, 它的 message 格式分为三行,这三行的详细介绍如下

标题: 【必填】  简单描述修改类型和内容
正文内容: 对本次提交的详细介绍,如为什么修改,怎么修改的,,开发思路是什么等等
页脚注释: 放 Breaking Changes 或 Closed Issues

模板:

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

其中 <> 尖括号中的为具体内容,<BLANK LINE>为空行。

详细说明:

  • type: 修改类型

    • feat: 新特性
    • fix: 修改问题
    • refactor: 代码重构
    • docs: 文档修改
    • style: 代码格式修改, 注意不是 css 修改
    • test: 测试用例修改
    • chore: 其他修改, 比如构建流程, 依赖管理。
    • revert: 用于撤销以前的 commit 详见后面特殊情况注释。
  • scope: 影响的范围, 一般为自己代码的模块名。
  • subject: 概述。建议符合 50/72 格式。
  • body: 具体修改内容, 可以分为多行。建议符合 50/72 格式。
  • footer: 一些备注, 通常是 BREAKING CHANGE 或修复的 bug 的链接。

特殊情况【回滚,Revert】:如果当前 commit 用于撤销以前的 commit,
必须以revert:开头,后面跟着被撤销 Commit 的 Header。
Body部分的格式是固定的,必须写成 This reverts commit <hash>.,其中的hash是被撤销 commit 的 SHA 标识符。
如果当前 commit 与被撤销的 commit,在同一个发布(release)里面,那么它们都不会出现在 Change log 里面。
如果两者在不同的发布,那么当前 commit,会出现在 Change log 的Reverts小标题下面。


参考:
工具参考
50/70格式
提交风格

git工程化 自动生成changeLog 发布版本相关推荐

  1. 自动生成Changelog

    使用release-please生成Changelog 以前可能很多人使用standard-version来生成对应的Changelog,现在已经不推荐使用这个库了,这个作者推荐使用 release- ...

  2. 自动生成 changelog.md,做一名有追求的工程师

    文章目录 commitlint + Husky 规范 git commit 日志 规范 commit 日志的好处 安装 & 配置 [commitlint](https://commitlint ...

  3. Python: Git Log自动生成Release Notes,并调用Outlook发送至邮件

    Python: Git Log自动生成Release Notes,并调用Outlook发送至邮件 主要功能 先上图 生成ReleaseNotes 邮件: 生成ReleaseNotes Text: 关键 ...

  4. 使用git命令导出项目_git自动生成changelog及项目版本管理

    版本管理 1.version类别介绍 每个npm包中都有一个package.json文件,如果要发包的话,package.json中的version就是版本号了. version字段结构为:'0.0. ...

  5. react 项目根据git commit记录自动生成CHANGELOG.md文档

    前言 本文基于 "conventional-changelog": "^3.1.25" "conventional-changelog-cli&quo ...

  6. 根据 commit message 自动生成 changelog

    前面和大家介绍了commitlint + Husky 规范 git commit 日志,提及了规范的 commit message 有助于团队其它人员 review,还可以有效的输出 CHANGELO ...

  7. wadl 的自动生成(cxf版本3.1.1)

    官方文档 http://cxf.apache.org/docs/jaxrs-services-description.html 举例: package cn.zno; import javax.ws. ...

  8. 使用 Ant 自动生成项目构建版本

    引言 对 于多版本项目,要提供新版本来跟上新功能或缺陷报告增加的速度,并同时仍然保持可接受的质量水平,可能是一项不小的挑战.构建自动化可确保准确性和消除人 为错误的可能性,从而部分地解决此问题.自动化 ...

  9. git commit规范 、CHANGELOG生成 和版本发布的标准自动化

    长期以来,大家是不是受限于这种情况:团队中每位成员提交代码时填写的信息随意,没有一定的规范,在出问题后想要定位到某次提交记录时更是难上加难,或者是加上了 commitlint之类的规范,也没有添加ch ...

最新文章

  1. 淡水:21世纪的分子微生物生态学
  2. 为 Vim 编辑器开发定制插件
  3. 【FBA】SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用...
  4. 第十四章 虚拟专网 ×××
  5. js高级编程_这位设计师用Processing把创意编程玩到了极致!
  6. 肖仰华 | 基于知识图谱的用户理解
  7. shell监控Nginx服务是否存在的脚本
  8. My third homework
  9. CNN数值初始化——xavier
  10. MTK功能机2503 GPIO配置
  11. 基于SSM的境外电商后台管理系统(含word论文文档)
  12. 使用fiddler绕过“请在微信客户端打开链接”
  13. k8s gc原理详解
  14. 特征选择 - 逐步回归 (stepwise regression)
  15. Linux下使用Shell脚本实现反向ssh自动交互
  16. java中jsp的题
  17. 仿58同城的伪静态写法
  18. 手机搜狐概念版 html,搜狐领跑四大门户 首推H5技术手机概念版
  19. 嫁人就嫁程序猿——钱多话少死的早!很励志。。。
  20. 微信公众号实现跟关注用户进行消息的交互功能(2)实现交互功能

热门文章

  1. 错误代码 missing-signature 错误原因: 缺少签名参数-自查方案
  2. RC4原理以及Python实现
  3. 对接京东获取任务工单接口jingdong.homefw.task.search,附接口字段详细说明,数据库设计,Java实现
  4. 数据结构JAVA实现——树
  5. 基于Python的OCR图像识别
  6. KL Divergence KL散度
  7. 2018清华计算机考研总结
  8. vscode中添加好看字体的方法
  9. 黑客爱用的 HOOK 技术大揭秘
  10. Altium Designer布局布线技巧分享