@canyonjs/git-diff
Source@canyonjs/git-diff 是一个用于在 CI/CD 流水线中检测代码变更并生成 Git Diff 内容的 NPM 包
使用
在 CI/CD 流水线中使用
npx @canyonjs/git-diff输出
在当前目录下生成diff.txt文件
diff.txt
diff --git a/fixtures/sum.js b/fixtures/sum.js
index 1234567..abcdefg 100644
--- a/fixtures/sum.js
+++ b/fixtures/sum.js
@@ -1,3 +1,5 @@
export function sum(a, b) {
+ // 新增的注释
return a + b;
+ // 另一个新增的注释
}
diff --git a/fixtures/add.js b/fixtures/add.js
index 1234567..abcdefg 100644
--- a/fixtures/add.js
+++ b/fixtures/add.js
@@ -1,3 +1,6 @@
export function sum(a, b) {
+ // 新增的注释行
+ console.log('计算中...');
return a + b;
+ // 结束注释
}原理
@canyonjs/git-diff 通过检测当前流水线环境变量,确定 CI/CD 提供商,然后根据提供商的特定环境变量判断当前是 MR 还是普通 Commit,从而确定需要进行 Git Diff 比较的 commit 范围。
检测逻辑
- 平台检测:首先检测 CI/CD 平台特定的环境变量,确定当前运行环境
- 事件类型判断:根据平台特定的环境变量判断是 MR/PR 还是普通 Commit
- 分支确定:
- 对于 MR/PR:获取源分支和目标分支
- 对于普通 Commit:获取当前分支和上一个 Commit
- Diff 生成:根据确定的分支或 Commit 范围生成 Git Diff 内容
Git Diff 范围确定
| 事件类型 | 比较范围 | 命令示例 |
|---|---|---|
| MR/PR | 源分支 vs 目标分支 | git diff origin/target..origin/source |
| 普通 Commit | 当前 Commit vs 上一个 Commit | git diff HEAD~1..HEAD |