pull_request 上的 Github 操作 - 处理当前提交中更改的文件

问题描述 投票:0回答:1

我有一个被触发的 github 动作工作流程

on: pull_request 
uses: tj-actions/changed-files@v35.
uses: actions/checkout@v3

它也会在每次推送到 PR 请求分支的提交时触发,这是可取的,但它会从 PR 开始时拾取该分支中所有更改的文件,而不仅仅是在最新提交中更改的文件。这导致我的操作逻辑出现问题。我怎样才能在我的操作中只获得最新的提交更改?

有人对可以提供此功能的已更改文件使用过其他操作吗?

github-actions pull-request
1个回答
0
投票

您不需要任何特殊的 GitHub 操作工作流步骤来获取当前提交中所做的更改。您可以简单地使用

git diff
列出提交中更改的文件。请参阅How do I list all the files in a commit?.

上的链接(评论中提到)

GITHUB_SHA
环境变量可用于获取拉取请求中的最新提交哈希。然后使用
git diff --name-only $GITHUB_SHA^
命令列出最新(
$GITHUB_SHA
)提交与其父(上一个)提交之间更改的文件。该命令使用
^
符号来引用先前的提交。换句话说,它只会显示最新提交中所做的更改。

默认情况下,GitHub Actions

checkout
工作流步骤 仅获取最后一次提交,而没有其他提交的历史记录。

对于触发工作流的 ref/SHA,默认情况下仅获取单个提交。设置

fetch-depth: 0
以获取所有分支和标签的所有历史记录。

这还不足以成功执行

git diff
命令。该操作需要至少两个提交在工作树中可用以执行彼此之间的比较。因此,为了能够进行
git diff
比较,您不仅需要最新的提交,而且之前的提交也必须包含在
checkout
步骤中才能成功执行命令。在你的情况下,设置
fetch-depth: 2
就足够了,因为只需要
2
提交(最新的和前一个)来制作
git diff
.

将以上所有要求放在一起:

steps:
  - name: Checkout (fetch last two commits)
    uses: actions/checkout@v3
    with:
      fetch-depth: 2
  - name: Process files changed in the current commit
    run: |
      changedFiles=$(git diff --name-only $GITHUB_SHA)
      for file in $changedFiles; do
        echo "Processing file: $file"
      done
© www.soinside.com 2019 - 2024. All rights reserved.