Skip to Content
DocumentationEcosystem@canyonjs/git-diff

@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 范围。

检测逻辑

  1. 平台检测:首先检测 CI/CD 平台特定的环境变量,确定当前运行环境
  2. 事件类型判断:根据平台特定的环境变量判断是 MR/PR 还是普通 Commit
  3. 分支确定
    • 对于 MR/PR:获取源分支和目标分支
    • 对于普通 Commit:获取当前分支和上一个 Commit
  4. Diff 生成:根据确定的分支或 Commit 范围生成 Git Diff 内容

Git Diff 范围确定

事件类型比较范围命令示例
MR/PR源分支 vs 目标分支git diff origin/target..origin/source
普通 Commit当前 Commit vs 上一个 Commitgit diff HEAD~1..HEAD