【发布时间】:2020-04-15 16:10:13
【问题描述】:
我有一个在拉取请求时触发的 github 操作工作流。我想查找每次提交中已更改的文件,因此我尝试运行 git diff-tree --no-commit-id --name-only -r ${{ github.sha }}
但是,它不会返回该拉取请求中最新提交的哈希提交。我返回了另一个哈希提交(我在我的仓库中的任何地方都找不到它的提交)。
任何人都知道如何解决这个问题或其他方式我可以在拉取请求中找到所有在提交中更改的文件?
编辑——yml文件
name: test
on: [pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- checkout my repo
- install python
- run a python script
run: |
CHANGED_FILES=$(git diff-tree --no-commit-id --name-only -r ${{ github.sha }})
python3 .github/scripts/test.py $CHANGED_FILES
我由 github.sha(这里 ^)生成的哈希提交似乎与我提交的实际哈希不匹配。
【问题讨论】:
-
在脚本中使用像
${{ github.sha }}这样的表达式真的有效吗?您是否尝试打印此值以查看它是否实际包含任何内容。尝试将其与GITHUB_SHA环境变量进行比较。 -
它似乎确实有效,它确实打印了一个值。当我更改触发器以推送它时,它可以完美地工作,与实际的提交哈希匹配。当触发器更改为拉取请求时出现问题,提交哈希不匹配,然后我没有返回任何文件
-
尝试使用
GITHUB_REF环境变量。所以git diff-tree --no-commit-id --name-only -r $GITHUB_REF -
收到此错误
fatal: ambiguous argument 'refs/pull/num/merge': unknown revision or path not in the working tree. -
我找到了另一种解决方法。我正在使用来自 github 市场
Changed Files Exporter的此操作。到目前为止似乎有效
标签: git github github-actions