Azure Devops offers two variables containing information about the current git branch name: $(Build.SourceBranchName)
and $(Build.SourceBranch)
.
While SourceBranch
contains the full reference to the branch, SourceBranchName
is expected to contain only the short branch name.
Unfortunately, the behavior is a bit unexpected when the branch name contains a slash (/
):
+---------------------------------------------------------------------------------------------------------+
| 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 |
+---------------------------------------------------------------------------------------------------------+
The part of the branch name before the slash is not considered as part of the branch name. My colleague pointed out that this is the documented behavior of Azure Devops:
Git repo branch or pull request: The last path segment in the ref. For example, in refs/heads/master this value is master. In refs/heads/feature/tools this value is tools.
I am not sure if this behavior is particularly useful: I want to checkout the branch, and need the branch name to include the slash. Also, If the part before the slash is stripped off, there might well be confusion about the actual path, as the name could be ambiguous.
I need the branch name including the slash. Is there any simple way to get it? Do I always have to work with the full ref in order to be on the safe side?