代码之家  ›  专栏  ›  技术社区  ›  Dmytro Shevchenko

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

  •  0
  • Dmytro Shevchenko  · 技术社区  · 9 年前

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

    如果这是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 回复  |  直到 9 年前
        1
  •  2
  •   Dmytro Shevchenko    9 年前

    正如Martin Ullrich所指出的,当前git分支存储在build变量中 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>