如何在GitHub Actions中获取分支倒数第二个提交SHA并设为输出
解决GitHub Actions中获取分支倒数第二个提交哈希的问题
问题根源
actions/checkout@v3 默认采用浅克隆模式,仅拉取分支的最新1个提交(默认参数fetch-depth: 1),本地仓库没有足够的提交历史,因此执行git rev-parse HEAD~1时会找不到对应的修订版本,触发报错。
修复方案
修改actions/checkout步骤,添加fetch-depth参数拉取足够的提交历史:
- 设置
fetch-depth: 0:拉取完整仓库历史,适用于需要访问任意历史提交的场景 - 设置
fetch-depth: 2:仅拉取最新2个提交,满足当前需求且更高效
修改后的完整工作流代码:
on: workflow_dispatch jobs: get_prev_sha: name: get previous sha of main runs-on: ubuntu-latest outputs: prev_sha: ${{ steps.prev_sha.outputs.prev_sha }} steps: - name: Checkout repository with sufficient history uses: actions/checkout@v3 with: ref: 'main' fetch-depth: 2 # 拉取最近2个提交,刚好满足获取上一个提交的需求 - name: Get last commit SHA id: prev_sha run: | echo "prev_sha=$(git rev-parse HEAD~1)" >> "$GITHUB_OUTPUT"
替代方案(无需修改克隆深度)
如果不想调整克隆深度,也可以通过GitHub API直接获取目标分支的上一个提交哈希:
on: workflow_dispatch jobs: get_prev_sha: name: get previous sha of main runs-on: ubuntu-latest outputs: prev_sha: ${{ steps.prev_sha.outputs.prev_sha }} steps: - name: Get previous commit SHA via GitHub API id: prev_sha run: | prev_sha=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ "https://api.github.com/repos/${{ github.repository }}/commits/main" | jq -r '.parents[0].sha') echo "prev_sha=$prev_sha" >> "$GITHUB_OUTPUT"
注:Ubuntu-latest环境默认预装
jq工具,GITHUB_TOKEN默认拥有仓库读取权限,无需额外配置。
内容的提问来源于stack exchange,提问作者ashraf minhaj
相关产品推荐
相关产品推荐

