首页 > 解决方案 > 如何在 Azure DevOps 中获取带有斜杠的分支名称?

问题描述

Azure Devops 提供了两个变量,其中包含有关当前 git 分支名称的信息:$(Build.SourceBranchName)$(Build.SourceBranch).

虽然SourceBranch包含对分支的完整引用,但SourceBranchName预计仅包含短分支名称。

不幸的是,当分支名称包含斜杠 ( ) 时,行为有点出乎意料/

+---------------------------------------------------------------------------------------------------------+
| Situation                     | Git branch name  | Build.SourceBranch          | Build.SourceBranchName |
|---------------------------------------------------------------------------------------------------------|
| branch name contains no slash | mybranch         | refs/heads/mybranch         | mybranch               |
| branch name contains slash    | release/mybranch | refs/heads/release/mybranch | mybranch               |
+---------------------------------------------------------------------------------------------------------+

斜杠之前的分支名称部分不被视为分支名称的一部分。我的同事指出,这是Azure Devops 的记录行为

Git repo 分支或拉取请求:参考中的最后一个路径段。例如,在 refs/heads/master 中,这个值为 master。在 refs/heads/feature/tools 这个值是工具。

我不确定这种行为是否特别有用:我想签出分支,并且需要分支名称包含斜杠。此外,如果斜线之前的部分被剥离,则实际路径很可能会造成混淆,因为名称可能会模棱两可。

我需要包含斜杠的分支名称。有什么简单的获取方法吗?为了安全起见,我是否总是必须使用完整的参考资料?

标签: gitazureazure-devops

解决方案


我总是Build.SourceBranch在我的脚本中使用。只需将其分配给一个新变量并refs/heads/从一开始就删除。我只用于 CI 和 PR:

  1. 对于 CI。我使用Build.SourceBranch没有refs/heads. 我使用 PowerShell:

$branchSource = "$(Build.SourceBranch)"
$branchSourcePath = $branchSource -replace "refs/heads/", ""

  1. 对于 PR。我使用System.PullRequest.SourceBranch不带变量的变量,refs/heads因为Build.SourceBranch它包含远程 PR 的路径。替换与第一个选项相同,只需使用正确的变量。

$branchSource = "$(System.PullRequest.SourceBranch)"
$branchSourcePath = $branchSource -replace "refs/heads/", ""


推荐阅读