我正在用Github动作构建Docker图像,并想用分支名称标记图像。
我找到了GITHUB_REF变量,但它导致了refs/heads/feature-branch-1,我只需要feature-branch-1。
我正在用Github动作构建Docker图像,并想用分支名称标记图像。
我找到了GITHUB_REF变量,但它导致了refs/heads/feature-branch-1,我只需要feature-branch-1。
当前回答
有一个非常简单的git命令来获取当前分支:
git rev-parse --abbrev-ref HEAD
要在env文件变量中获得输出,只需输入:
- name: Set CURRENT_BRANCH run: echo "CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV
获取env变量的输出:
- name: Get CURRENT_BRANCH run: echo ${{ env.CURRENT_BRANCH}}
来源:https://www.techiedelight.com/determine-current-branch-name-git/
其他回答
${{ github.ref_name }}
至少对推送来说还行。参见ref_name了解更多细节。它说:
触发工作流运行的分支或标记名称。
下面是一个代码片段,它是一个基于$GITHUB_REF的环境变量,如果不存在,则默认为dev。
根据您的需求调整sed命令。
export GIT_BRANCH=$(echo ${GITHUB_REF:-dev} | sed s/.*\\///g)
现在$ {{github。Ref}}是获取分支名称的正确方法。 请记住${{github。Ref}}有refs/heads/..前缀
博士TL;
这适用于你可以在on下指定的每个触发器(例如push或pull_request):
env:
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
解释
诀窍在于github。head_ref仅在工作流由pull_request触发时设置,并且它包含PR. github的源分支的值。Ref_name只在工作流不是由pull_request触发的情况下使用,而且它也只包含分支名称。
GitHub的文档
来自GitHub官方文档的详细解释:
github。ref_name string触发工作流运行的分支或标记的短引用名称。该值与GitHub上显示的分支或标记名称匹配。例如,feature-branch-1。
github。工作流运行中pull请求的head_ref或源分支。此属性仅在触发工作流运行的事件为pull_request或pull_request_target时可用。
如何在Github行动中获得当前的分支?
假设${{github。Ref}}类似于refs/heads/mybranch,你可以使用以下方法提取分支名称:
steps:
- name: Prints the current branch name
run: echo "${GITHUB_BRANCH##*/}"
env:
GITHUB_BRANCH: ${{ github.ref }}
如果你的分支包含斜杠(比如feature/foo),使用下面的语法:
steps:
- name: Prints the current branch name
run: echo "${GITHUB_REF#refs/heads/}"
致谢:@rmunn评论
或者使用已接受答案的方法,这里是更短的版本(lint友好):
steps:
- name: Get the current branch name
shell: bash
run: echo "::set-output name=branch::${GITHUB_REF#refs/heads/}"
id: myref
然后在其他步骤中引用${{steps.myref.outputs.branch}}。
注:
上述方法仅适用于基于unix的映像(Linux和macOS)。 对于文档,请阅读:GitHub Actions的上下文和表达式语法。