发布软件时写 Release Note 算是常规操作,但每次从头手打也有点累,可以考虑从 Git 的提交历史中自动生成。

Git 提交信息一般是三段式结构,段落之间使用空行隔开:

<subject>
// 空行
<body>
// 空行
<trailers>

subjectbody 自不必多说,trailers 中一般是一条条键-值对构成的信息,键和值由冒号 : 分隔。比如 Git 的 Commiter: 就可以视为一条 trailer,Gerrit 代码审查通过后,也会在 Git 提交消息中添加 Reviewed-by:Tested-by: 之类的 trailer

现假设提交信息中的 trailers 包含 TypeIssue 字段,分别表示类别(NewFeature, BugFix 之类)和 BUG 编号(GitHub 上的 issue 编号或者内部系统的 BUG 编号):

Fixed a crash

- blahblah
- blahblahblah Type: BugFix
Issue: issue-120

就可以结合 git logawk 生成 Rlease Note:

git log --format='%(trailers:key=Type,valueonly,separator=%x20)%x1c%s [%(trailers:key=Issue,valueonly,separator=,)]' $FROM..HEAD | awk -F "\034" '
{
gsub(/\[\]$/, "", $2);
if (length($1) == 0) $1="MISC";
if (!($1 in item_count)) item_count[$1]=0;
items[$1, item_count[$1]]=$2;
item_count[$1]++;
}
END {
for (k in item_count) {
print k;
k2=k;
gsub(/./, "-", k2);
print k2
for (i=0; i<item_count[k]; i++) print "* "items[k, i];
print ""
}
}'

输出:

BugFix
------
* Fixed a typo
* Fixed a crash [issue-120] NewFeature
----------
* Added some magic

选择使用 awk 处理 git log 的输出是因为 linux 跟 macOS 都带这个软件,不需要额外安装依赖。

Git 2.22.0 及以上版本才支持按键值筛选 trailers

在 Windows 系统上,可能没有办法直接运行 .sh 文件。但是如果安装了 Windows 版本的 Git,则会带一个 Git Bash(更重要的是,也带了 awk),这样就可以在 Git Bash 中运行 .sh 文件,也可以创建一个 .cmd 文件包装一下:

@ECHO off
SETLOCAL CALL :FIND-PATH GITEXE_PATH git.exe
IF "%GITEXE_PATH%"=="" (
ECHO git.exe is not found on your system
EXIT /B 2
) CALL :GET-DIR-NAME GITEXE_DIR "%GITEXE_PATH%"
CALL :GET-DIR-NAME GITEXE_DIR "%GITEXE_DIR:~0,-1%" @"%GITEXE_DIR%bin\bash.exe" release-note.sh %* :FIND-PATH
SET "%~1=%~f$PATH:2"
EXIT /B :GET-DIR-NAME
SET "%~1=%~dp2"
EXIT /B

从 Git 提交历史生成 Release Note的更多相关文章

  1. Git提交代码规范 而且规范的Git提交历史,还可以直接生成项目发版的CHANGELOG(semantic-release)

    Git提交代码规范 - 木之子梦之蝶 - 博客园 https://www.cnblogs.com/liumengdie/p/7885210.html Commit message 的格式 Git 每次 ...

  2. git提交历史不显示自己账户的问题

    其实这个问题本身也不大好描述.还是上图好了 问题就如同途中倒数第二次提交.明明就是我提交的,却不显示我的账号.个人页面也不反映这次提交.   后来发现问题所在,要想正确显示,必须要把对这个项目的邮箱设 ...

  3. 【第八篇】- Git 查看提交历史之Spring Cloud直播商城 b2b2c电子商务技术总结

    ​ Git 查看提交历史 Git 提交历史一般常用两个命令: git log 在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看. 针对 ...

  4. 使用".."指定git提交范围与"..."指定git提交范围的区别

    http://blog.csdn.net/hansel/article/details/8952967 使用".."(两个点)和"..."(三个点)都可以指定一 ...

  5. git查看提交历史

    git日志的查看 在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看. 查看日志信息: $ git log 可以用 --oneline ...

  6. git 使用详解(5)-- get log 查看提交历史【转】

    转自:http://blog.csdn.net/wh_19910525/article/details/7468549 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 限制 ...

  7. git log 查看 提交历史

    在提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,可以使用 Git log 命令查看. 接下来的例子会用我专门用于演示的 simplegit 项目,运行下面的命令获取该项目源代码: git ...

  8. Git批量修改提交历史

    有些时候我们可能需要批量修改提交历史,当然了,最近一次的提交历史很简单我们可以利用 git commit --amend 来进行最近一次提交的修改,如果你此时想要更新作者提交时间等也可以在amend之 ...

  9. git log 查看 当前分支的 提交历史

    git log  查看 当前分支的 提交历史 在提交了若干更新之后,想回顾下提交历史,可以使用 git log 命令查看 默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排 ...

  10. [Git]03 如何查看提交历史

     在提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,可以使用 gitlog 命令查看. 常用命令 1.查看提交历史 $ git log 2.查看某个文件或者某个目录的递交历史 $ gi ...

随机推荐

  1. 横扫鸿蒙弹窗乱象,SmartDialog出世

    前言 但凡用过鸿蒙原生弹窗的小伙伴,就能体会到它们是有多么的难用和奇葩,什么AlertDialog,CustomDialog,SubWindow,bindXxx,只要大家用心去体验,就能发现他们有很多 ...

  2. __set_BASEPRI(); 使用不正常

    虽然 BASEPRI 是8位寄存器,但是STM32的CortexM3&M4只用了高4位,低四位是没有用到的. __set_BASEPRI(0x0f); // 无效,小于0x0f的值无效 __s ...

  3. openstack硬盘扩容

    1.挂载好新硬盘后输入fdisk -l命令看当前磁盘信息2.用fdisk /dev/vda 进行分区3.进入fdisk命令,输入h可以看到该命令的帮助,按n进行分区4.这里输入e即分为逻辑分区,按p即 ...

  4. Flutter调试debug或者打包release帧率只有60的原因

    问题描述 最近发现Flutter中引入像素较大的静态图片或者字体导致调试或者打包之后在高刷手机上帧率只有60的问题. 测试设备为小米13,可在开发者选项中直接打开帧率显示, 也可使用statsfl插件 ...

  5. .NET 开源实时监控系统 - WatchDog

    前言 在平时的开发中随着我们系统应用不断地迭代变的复杂,对应用的实时监控变得越来越重要.实时监控不仅可以帮助我们快速定位问题,还能在出现问题时及时采取措施,减少业务中断的时间. 本文将介绍一个名为Wa ...

  6. ES6中对数组的数据进行排序

    今天在工作中遇到了要对多选数据进行排序的一个功能,在此学习记录一下. 实现效果:点击左边的向下或者向上排序的按钮实现数据的排序. 选择第二个向下排序,结果如下: 具体方法如下: //找到原来需要排序的 ...

  7. NeoVim 安装

    NeoVim 官网 安装 macOS brew install neovim Windows 使用 winget: winget install Neovim.Neovim 也可以使用 scoop: ...

  8. 国内加速拉取docker镜像的几种方法

    参考首页 快捷命令,使用本站代理拉取镜像,并修改回原始镜像名,在删除代理镜像名. 参考以下 docker cli 和 docker-compose.yml 修改镜像名后,继续一直使用本站代理服务未启动 ...

  9. Node.js开发博客项目笔记-初始化路由(博客列表、新增、更新、删除、详情、登录)(3)

    工程目录 如图所示,工程目录如下: 我们在工程下新建src的目录,src目录下新建三个文件夹: controller:交互数据放到该目录下: model:model类放到该目录下: router:路由 ...

  10. ASP.NET Core – Thread, Task, Async 线程与异步编程

    前言 平常写业务代码, 很少会写到多线程. 久了很多东西都忘光光了. 刚好最近在复习 RxJS. 有一篇是讲 scheduler 的. 会讲到 JavaScript 异步相关的资讯. 既然如此那就一次 ...