如何在GitHub上获取分支名称?

时间:2020-02-19 12:15:03

标签: github github-actions

在GitHub动作期间,我想知道分支的名称:

  • 进行推送操作:当前分支的名称
  • 进行一次pull_request操作:目标分支的名称

我需要一个像developmasterfeature/xxx这样的字符串(而不是refs / pull /…)。

${{ github.ref }}变量给了我refs/heads/develop。我怎么只能得到develop

5 个答案:

答案 0 :(得分:5)

您可以像下面这样创建GITHUB_REF最后一部分的步进输出。

on: push
jobs:
  example:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Set output
        id: vars
        run: echo ::set-output name=short_ref::${GITHUB_REF#refs/*/}

      - name: Check output
        run: echo ${{ steps.vars.outputs.short_ref }}

答案 1 :(得分:1)

您可以从github之类的${{ github.head_ref }}对象获得它

答案 2 :(得分:0)

您可以使用以下语法获取分支名称-

name: build

on: [push, pull_request]

jobs:
  dummy-fake:
    runs-on: ubuntu-latest
    steps: 
      - name: Checkout repo
        uses: actions/checkout@v2
      - name: Verify run id
        run : echo Run Id $GITHUB_RUN_ID 
      - name: Output the branch name
        run: echo $(echo $GITHUB_REF | cut -d'/' -f 3)

答案 3 :(得分:0)

另一种选择是将其作为环境变量:

  steps:
    - name: Set env.BRANCH
      run: echo "BRANCH=$(echo $GITHUB_REF | cut -d'/' -f 3)" >> $GITHUB_ENV

    - name: Is main?
      if: env.BRANCH == 'main'
      run: echo "This is 'main' branch"

答案 4 :(得分:0)

这将创建一个具有以下行为的环境变量 GIT_BRANCH:

  • 在 PR 之外,这被设置为分支短名称(master,而不是 refs/heads/master
  • 在 PR 中,这被设置为目标分支短名称(master,而不是 refs/pull/123/merge
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Set environment variables
        run: |
          # Short name for current branch. For PRs, use target branch (base ref)
          GIT_BRANCH=${GITHUB_BASE_REF:-${GITHUB_REF#refs/heads/}}
          echo "GIT_BRANCH=$GIT_BRANCH" >> $GITHUB_ENV

这是如何工作的:

  • GITHUB_BASE_REF 是 PR 触发期间目标分支的短分支名称,否则为空。
  • GITHUB_REF 始终有一个值,但该值会根据上下文发生变化。在 PR 之外,GITHUB_REF 是“完整”分支名称 (refs/heads/master)。在 PR 内部,它是 PR 分支名称 (refs/pull/123/merge)。

所以这个脚本使用 GITHUB_BASE_REF 如果设置,否则它使用 GITHUB_REF 并删除“refs/heads/”前缀。