git - 如何在 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 这个值是工具。
我不确定这种行为是否特别有用:我想签出分支,并且需要分支名称包含斜杠。此外,如果斜线之前的部分被剥离,则实际路径很可能会造成混淆,因为名称可能会模棱两可。
我需要包含斜杠的分支名称。有什么简单的获取方法吗?为了安全起见,我是否总是必须使用完整的参考资料?
解决方案
我总是Build.SourceBranch
在我的脚本中使用。只需将其分配给一个新变量并refs/heads/
从一开始就删除。我只用于 CI 和 PR:
- 对于 CI。我使用
Build.SourceBranch
没有refs/heads
. 我使用 PowerShell:
$branchSource = "$(Build.SourceBranch)"
$branchSourcePath = $branchSource -replace "refs/heads/", ""
- 对于 PR。我使用
System.PullRequest.SourceBranch
不带变量的变量,refs/heads
因为Build.SourceBranch
它包含远程 PR 的路径。替换与第一个选项相同,只需使用正确的变量。
$branchSource = "$(System.PullRequest.SourceBranch)"
$branchSourcePath = $branchSource -replace "refs/heads/", ""
推荐阅读
- javascript - 获取 iTunes 搜索 API GET
- apache - 将域重定向到子文件夹,同时使用 .htaccess 保留域名
- java - 使用多种类型的数据包实现 Protobuf3 的最佳方法是什么?
- xcode - NO + [RCTConvert MKCoordinateRegion:] 找到函数
- android - Android中ViewPropertyAnimate类的setX()、x()和setTranslationX()有什么区别
- r - SHINY R 错误:未处理的异常:内部服务器错误
- javascript - 目标容器不是新的 DOM 元素
- node.js - 带有连字符的 SEO url - Nodejs
- r - 如何从 R 中的关联规则中删除大括号和“=>”符号
- sql-server - 无法在 SQL Fiddle 中插入 INTO VALUES()