我正在用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}}是获取分支名称的正确方法。 请记住${{github。Ref}}有refs/heads/..前缀

注意,如果你在pull request触发器上执行你的GitHub动作,那么GITHUB_REF变量将包含类似refs/pull/421/merge这样的东西,所以如果你尝试git push到那个名字,它很可能会失败。

你可以在YAML中使用GitHub上下文中的引用。比如:${{github。head_ref}}

https://help.github.com/en/actions/automating-your-workflow-with-github-actions/contexts-and-expression-syntax-for-github-actions#github-context

如果你使用的是V2的actions/checkout,那么你总是可以运行git branch——show-current来获取当前签出的分支的名称。

对于使用Windows映像来运行操作的人,有几个要点需要了解:

假设GitHub动作使用CMD shell是不正确的。他们默认使用PowerShell。 您可以指定shell使用以下方式:

- run: |
    ...
  shell: cmd

您可以使用值'bash'在bash shell上下文中执行命令。

所以,总而言之,你不需要浪费潜在的时间试图弄清楚如何以破旧的cmd方式做事(就像我做的那样)。

为了简单地获取当前分支的名称,你可以在将shell设置为'bash'时使用流行的解决方案,或者使用例如下面的简单方法在默认PowerShell中设置变量:

$branchName = $Env:GITHUB_REF -replace "refs/heads/", ""

在Windows上运行? Windows default命令是一个PowerShell终端。

  - name: SET CURRENT_BRANCH
    run: |
      $branchName = "${{github.ref}}".Split("/")["${{github.ref}}".Split("/").Length -1]
      echo "::set-env name=CURRENT_BRANCH::$(echo $branchName)"