@huangminhua/giff
v1.1.5
Published
git变更内容查询工具
Downloads
1,005
Readme
giff
git 变更内容查询工具,支持查看变更文件列表、变更行详情,并结合 JaCoCo 报告展示单元测试覆盖率。
安装
npm install -g @huangminhua/giff命令概览
giff [options]| 选项 | 说明 |
|------|------|
| -l, --list | 获取变更文件列表 |
| -f, --file <path> | 查看指定文件的变更内容详情 |
| -j, --jacoco | 展示 JaCoCo 覆盖率信息 |
| -c, --commit [commitId] | 指定比较基准 commitId |
| -V, --version | 显示版本号 |
| -h, --help | 显示帮助信息 |
支持短标志合并,如 -lj、-fj path、-fjc path commitId。
功能详解
1. 列出变更文件 (-l)
获取当前分支相对于主分支(或指定 commit)的变更文件列表,包含已提交和未提交的文件。
# 与主分支比较
giff -l
# 与指定 commit 比较
giff -l -c abc123
# 所有文件(commitId 为 0,视为全部新增)
giff -l -c 0输出示例:
src/main/java/com/xxx/api/stream/XxxProducer.java
src/main/java/com/xxx/api/stream/YyyConsumer.java
src/main/resources/application.yml2. 查看文件变更详情 (-f)
展示指定文件对应的git diff结果明细。
giff -f src/main/java/com/xxx/api/stream/XxxProducer.java
# 与指定 commit 比较
giff -f src/main/java/.../XxxProducer.java -c abc1233. JaCoCo 覆盖率统计 (-l -j)
列出变更文件的同时,展示每个文件的 JaCoCo 单元测试覆盖率,首行显示总计覆盖率。
giff -lj输出示例:
总计 [行覆盖率: 75.0% (9/12), 分支覆盖率: 50.0% (6/12)]
src/main/java/.../XxxProducer.java [行覆盖率: 100.0% (6/6), 分支覆盖率: 100.0% (6/6)]
src/main/java/.../YyyConsumer.java [行覆盖率: 50.0% (3/6), 分支覆盖率: 0.0% (0/6)]
src/main/java/.../dto/Result.java [非单元测试目标, 无需检测覆盖率]
src/main/resources/application.yml [非单元测试目标, 无需检测覆盖率]覆盖率计算公式:
- 行覆盖率 = (fc + pc) / (fc + pc + nc)
- 分支覆盖率 = (bfc + bpc) / (bfc + bpc + bnc)
其中:
fc— 完全覆盖(fully covered)pc— 部分覆盖(partially covered)nc— 未覆盖(not covered)bfc— 分支完全覆盖(branch fully covered)bpc— 分支部分覆盖(branch partially covered)bnc— 分支未覆盖(branch not covered)
4. 文件级行覆盖率详情 (-f -j)
展示指定文件每一行的变更标记和 JaCoCo 覆盖标记。
giff -fj src/main/java/com/xxx/api/stream/XxxProducer.java输出示例:
行覆盖率: 75.0% (6/8), 分支覆盖率: 50.0% (4/8)
ignore 1) package com.xxx.api.stream;
ignore 2)
fc 3) public class XxxProducer {
pc bpc 4) if (condition1 && condition2) {
fc 5) doSomething();
nc 6) fallback();
ignore 7) }覆盖标记说明:
| 标记 | 含义 |
|------|------|
| fc | 完全覆盖 |
| fc bfc | 分支完全覆盖 |
| pc bpc | 部分覆盖,分支部分覆盖 |
| nc | 未覆盖 |
| nc bnc | 分支未覆盖 |
| ignore | 非变更行,或无 JaCoCo 数据 |
JaCoCo 报告路径推导
工具根据源文件路径自动推导 JaCoCo 报告路径:
源文件:src/main/java/com/xxx/api/stream/XxxProducer.java
报告: target/jacoco-ut/com.xxx.api.stream/XxxProducer.java.html规则:去掉 src/main/java/ 前缀,将包路径的 / 替换为 .,拼接到 target/jacoco-ut/ 下,加 .html 后缀。
环境变量
| 变量名 | 说明 | 默认值 |
|--------|------|--------|
| GIFF_JACOCO_EXCLUDE | 排除 JaCoCo 覆盖率检测的文件正则,逗号分隔 | /dto/,/vo/,/entity/,/po/ |
排除规则默认还会排除:
- 非
.java文件 src/test下的测试文件
# 自定义排除规则
GIFF_JACOCO_EXCLUDE="/dto/,/vo/,/entity/,/po/,/enums/" giff -ljcommitId 说明
| 值 | 行为 |
|----|------|
| 不指定 | 与主分支的 Merge Base 节点比较 |
| 具体 commitId | 与指定 commit 比较 |
| 0 | 所有文件/行视为新增,适用于统计全量覆盖率 |
主分支自动检测
工具按以下优先级自动检测主分支名:
git rev-parse --abbrev-ref origin/HEAD(远程 HEAD 引用)- 依次尝试本地
main、master、trunk分支 - 默认
main
