GitHub Action执行git diff报错:无法访问提交SHA
解决GitHub Action中git diff找不到旧提交SHA的问题
你的问题出在两个核心点:
- 配置里缺少拉取仓库代码的步骤,GitHub Action的运行环境是全新的容器,默认不会自动拉取你的仓库代码;
- 即使添加默认拉取步骤,GitHub Actions默认采用浅克隆(仅拉最新1个提交),导致
github.event.before对应的旧提交不在本地仓库中,git无法访问该SHA。
修复方案
添加actions/checkout步骤并配置拉取完整仓库历史,或者至少拉取足够覆盖目标提交的深度:
修改后的完整配置如下:
name: If files in folder_path were changed on: push: jobs: if-file-changed: name: Check if files changed runs-on: ubuntu-latest steps: - name: 拉取仓库代码 uses: actions/checkout@v4 with: fetch-depth: 0 # 拉取完整仓库历史,确保所有提交SHA都能被访问 - name: 获取push事件中变更的文件 run: | echo ${{ github.sha }} - 触发工作流的提交SHA echo ${{ github.event.before }} - 上一个提交SHA git --no-pager diff --name-only ${{ github.sha }} ${{ github.event.before }}
补充说明
- 如果不需要完整仓库历史,也可以设置
fetch-depth: 2(因为push事件中github.event.before是触发提交的前一个提交,拉取2个提交就能覆盖),但如果存在强制推送等特殊情况,fetch-depth: 0是最稳妥的选择; - 本地执行命令正常是因为你的本地仓库已经有完整的提交历史,而GitHub Action的运行环境是全新的,必须手动拉取仓库代码才能执行git相关操作。
内容的提问来源于stack exchange,提问作者Aseem
相关产品推荐
相关产品推荐

