我正试图在GitHub操作中将git diff
中的文件名保存到数组中,以便在数组中迭代。
我可以确认我从下面得到了我需要的正确的两个提交哈希(也尝试过不使用--short
(-必须将分支名称转换为提交哈希:
BASE_COMMIT=$(git rev-parse --short origin/$GITHUB_BASE_REF)
HEAD_COMMIT=$(git rev-parse --short origin/$GITHUB_HEAD_REF)
我预计以下操作会产生一组修改文件的文件路径,但不起作用:
SAVEIFS=$IFS
IFS=$'n'
mapfile my_array < <( git diff --name-only $BASE_COMMIT -- $HEAD_COMMIT )
IFS=$SAVEIFS
echo "${#myArray[@]}"
我还尝试使用mapfile的-t
选项来代替$IFS
,但仍然得到了一个空数组:
my_array=()
mapfile -t my_array < <( git diff --name-only $BASE_COMMIT -- $HEAD_COMMIT )
echo "${#myArray[@]}"
我已经确认,当在Mac上本地运行bash时,git diff --name-only $BASE_COMMIT..$HEAD_COMMIT
给了我预期的结果,$BASE_COMMIT/$HEAD_COMMIT
被适当的提交哈希所取代。
.yml
的操作部分如下,其中foo_bar.sh
是包含上述片段的可执行脚本。
name: Pull Request Action
on: pull_request
jobs:
JobName1:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Foo Bars
run: |
git fetch
./.github/foo_bar.sh
shell: bash
我查阅了Stack Overflow和GH Action文档,但没有找到一个在不使用市场上的另一个Action的情况下有效的答案(安全部门说这是不可能的(。我很感激你的帮助。
简单答案,归因于@larsks
GitHub Actions不需要用--
替换..
。我在之前的故障排除中误读了一个错误,以获得适当的提交。只要在workflow.yml文件中设置了shell: bash
,数组就可以正常工作。