在 GitHub Actions 中,我想知道分支的名称:
- 对于 push 操作:当前分支的名称
- 对于 pull_request 操作:目标分支的名称
我需要一个字符串,例如 develop
、master
或 feature/xxx
(而不是 refs/pull/...)。
${{ github.ref }}
变量给出的是 refs/heads/develop
。如何仅获取 develop
?
在 GitHub Actions 中,我想知道分支的名称:
我需要一个字符串,例如 develop
、master
或 feature/xxx
(而不是 refs/pull/...)。
${{ github.ref }}
变量给出的是 refs/heads/develop
。如何仅获取 develop
?
更新: GitHub添加了上下文变量${{ github.ref_name }}
, 返回"触发工作流运行的分支或标签名称。"
原始回答:
您可以创建一个步骤输出,其中包含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 }}
github
上下文中添加了另一个上下文变量:github.ref_name
,根据https://docs.github.com/en/actions/learn-github-actions/contexts#github-context的说明,该变量返回“触发工作流运行的分支或标签名称。” - Michaelgithub.ref_name
在PR上不会返回分支名称...它会返回类似于144/merge
这样的内容。 - ReenigneArcher这将创建一个名为GIT_BRANCH的环境变量,其行为如下:
master
而不是refs/heads/master
)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
工作原理:
refs/heads/master
)。在 PR 内部,它是 PR 分支名称(refs/pull/123/merge
)。因此,此脚本使用 GITHUB_BASE_REF(如果设置),否则使用 GITHUB_REF 并删除“refs/heads/”前缀。
GITHUB_HEAD_REF
而不是 GITHUB_BASE_REF
。 - Michael Rgithub
对象中获取它,例如 ${{ github.head_ref }}
。head_ref
仅针对拉取请求设置,因此虽然这将适用于拉取请求操作,但它不适用于分支推送操作(OP询问两者均可)。对于分支推送操作,需要从$GITHUB_REF
或${{ github.ref }}
中提取分支名称。 - Tomgithub.base_ref
。请参阅 https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context。 - Zach${{ github.head_ref || github.ref_name }}
,以便在拉取请求内部和外部都能正常工作。 - Etienne另一个选项是将其作为环境变量:
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"
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)
refs/heads/feature/foo
,则此操作将失败。 - Ben Whaley
topic-1
分支到master
分支,你想要的是源分支topic-1
还是目标分支master
? - Michael R