在 GitHub Actions 中查找拉取请求的共同祖先

Flo*_*ian 5 git github github-actions

我试图找到 GitHub Action 中一个分支与另一个分支分离的提交的 SHA。

在本地,我可以通过运行来实现这一点git merge-base <commit> <commit>。我正在尝试在工作流程中实现相同的目标。

我有以下内容workflow.yaml

name: "Find common ancestor"

on:
  pull_request:
    branches:
      - master

jobs:
  find:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          fetch-depth: 0     

      - name: Find common ancestor
        run: git merge-base "$GITHUB_HEAD_REF" "$GITHUB_BASE_REF"
Run Code Online (Sandbox Code Playgroud)

当工作流在打开分支“dev”到“master”的拉取请求时运行时,工作流会报告以下错误:

2021-08-14T19:17:04.5732118Z fatal: Not a valid object name dev
Run Code Online (Sandbox Code Playgroud)

我所有的研究都表明需要设置获取深度。据我了解,如果不将 fetch-depth 设置为 0,则只会获取浅克隆。不幸的是,即使将 fetch-depth 设置为 0,工作流程也无法找到必要的引用,而且我也没有想法。

有谁知道为什么 merge-base 无法识别引用,或者知道寻找共同祖先的替代方法?

编辑:

运行时git branch -a,我发现 refs 前面带有remote/origin/*,这解释了为什么在调用时找不到它们merge-base。为什么我退房后无法访问当地分行?

Aro*_*ost 4

  FindCommon:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: Find common ancestor
        env:
          BASE_BRANCH: ${{ github.base_ref }}
        run: git merge-base --fork-point origin/$BASE_BRANCH
Run Code Online (Sandbox Code Playgroud)

对我有用。