返回

如何使用 GitHub Actions 找出分支差异并分配给变量?

Linux

使用 GitHub Actions 找出分支差异并分配给变量:分步指南

问题:

在使用 Git 进行代码协作时,经常需要了解分支之间的差异。本指南将演示如何使用 GitHub Actions 自动执行这一任务,并将其分配给变量,以便在工作流程中进一步使用。

步骤:

1. 设置环境变量

在 GitHub Actions 工作流文件中,添加以下环境变量:

  • BASE_BRANCHmaster 分支的名称。
  • PR_BRANCH:当前分支的名称。

2. 使用 git diff 找出差异

使用 git diff 命令找出两个分支之间的差异:

git --no-pager diff --name-only $BASE_BRANCH..$PR_BRANCH

3. 过滤已删除文件

使用 grep 命令过滤掉已删除的文件:

grep -viF "$(git diff --name-only --diff-filter=D $BASE_BRANCH..$PR_BRANCH)"

4. 过滤特定文件

如果需要,使用 grep 命令过滤掉特定文件:

grep -viF "segment-validation.yml"

5. 将结果分配给变量

将过滤后的文件列表分配给变量 ALL_FILES

ALL_FILES=$(...)

注意事项:

  • 确保 grep 命令的版本至少为 3.0,以支持 -viF 选项。
  • 如果 git diff 命令没有返回差异,则变量 ALL_FILES 将为空。

示例工作流文件:

name: Assign Diff Between Branches to Variable

on:
  push:
    branches:
      - master

jobs:
  assign_diff:
    runs-on: ubuntu-latest

    steps:
      - name: Set environment variables
        env:
          BASE_BRANCH: master
          PR_BRANCH: ${{ github.ref }}

      - name: Find diff between branches
        id: find_diff
        run: |
          ALL_FILES=$(git --no-pager diff --name-only $BASE_BRANCH..$PR_BRANCH | grep -viF "$(git diff --name-only --diff-filter=D $BASE_BRANCH..$PR_BRANCH)") | grep -viF "segment-validation.yml")

      - name: Print diff
        run: |
          echo $ALL_FILES

结论:

通过使用 GitHub Actions 和 git diff 命令,您可以自动找出分支之间的差异,并将其分配给变量。这对于自动化工作流程并确保分支之间差异的准确性非常有用。

常见问题解答:

  1. 我应该使用哪个分支作为 BASE_BRANCH

    • 通常情况下,BASE_BRANCH 应设置为目标分支,例如 master
  2. 如果 git diff 命令没有返回差异,会发生什么?

    • 变量 ALL_FILES 将为空。
  3. 我如何过滤掉多个特定文件?

    • 您可以在 grep 命令中使用 -e 选项指定多个文件:
      grep -viF -e "file1.txt" -e "file2.txt"
      
  4. 我可以在哪里找到更多有关 GitHub Actions 的信息?

  5. 我可以使用哪些其他方法来找出分支差异?

    • 您还可以使用以下命令:
      git log --pretty=oneline $BASE_BRANCH..$PR_BRANCH
      git diff --stat $BASE_BRANCH..$PR_BRANCH