如何在TFS 2013版本中获取当前的Git分支名称?

时间:2017-08-17 10:49:05

标签: git tfs msbuild tfs2013

我的目标

我想在我的包的名称中包含当前的Git分支名称(然后通过Octopus部署)。

如果这是TFS 2015或2017,我可以在构建定义中将构建号格式设置为$(SourceBranchName)-something。或者我可以在$(BUILD_SOURCEBRANCHNAME)文件中使用构建变量.proj

但我使用的是TFS 2013,因此我无法使用这些新变量。

如何在TFS 2013中实现同样的目标?

我尝试了什么

我试图通过Git命令获取分支名称:

<Exec Command="git rev-parse --abbrev-ref HEAD" ContinueOnError="false" IgnoreExitCode="true" ConsoleToMsBuild="true">
  <Output TaskParameter="ConsoleOutput" PropertyName="CurrentGitBranch" />
</Exec>

但这个输出只是HEAD

我也尝试将命令更改为:

git symbolic-ref --short HEAD

返回fatal: ref HEAD is not a symbolic ref

因此,构建服务器上的签出存储库似乎没有指向任何特定分支。

1 个答案:

答案 0 :(得分:2)

正如Martin Ullrich所指出的,当前的git分支存储在构建变量TF_BUILD_SOURCEGETVERSION中。存储的值具有以下格式:

LG:refs/heads/branches/your-branch:71f12206f54365098b2d11cbf08844e82b664594

不确定LG是什么,但第二部分是分支名称,最后一部分是提交哈希。解析这些信息非常容易:

<Target Name="ParseGitInfo">
  <PropertyGroup>
    <GitBranch>$(TF_BUILD_SOURCEGETVERSION.Split(':')[1])</GitBranch>
    <GitBranchName>$(GitBranch.Substring($([MSBuild]::Add($(GitBranch.LastIndexOf('/')), 1))))</GitBranchName>
  </PropertyGroup>  
</Target>