使用 MS build 在运行时了解 Git Branch 和 Hashref

问题描述 投票:0回答:1

我想从 refs/heads/Branchname 读取 git Head 值和 Hash ref 值并将它们存储到文件路径中。

我能够读取该值并将其存储到文件中现在这就是我想要的

  1. 问题是我想拆分 .git/Head 文件值,并且只想存储输出中的分支名称,例如,我从 .git/Head 获取值作为参考:refs/heads/BranchName 但我只需要 BranchName那么如何将此输出分割存储到@(PathToHashRef)

  2. 我想读取.git/Head 文件而不传递硬编码路径。

  3. 还有我想从 1 号点的恶意值传递的路径中的 BranchName

<ItemGroup>
    <PathToHashRefs Include="D:/Project/ProjectName/.git/refs/heads/BranchName"/>
</ItemGroup>

下面是我正在使用的代码

  <Target Name="OutputGitVersion" AfterTargets="AfterBuild">
    <ItemGroup>
      <GitHeadFile Include="D:/Project/ProjectName/.git/HEAD"/>
    </ItemGroup>
    <ItemGroup>
      <PathToHashRefs Include="D:/Project/ProjectName/.git/refs/heads/BranchName"/>
    </ItemGroup>
    <ReadLinesFromFile
          File="@(GitHeadFile)" >
      <Output
            TaskParameter="Lines"
            ItemName="PathToHashRef"/>
    </ReadLinesFromFile>

    <ReadLinesFromFile
        File="@(PathToHashRefs)" >
      <Output
            TaskParameter="Lines"
            ItemName="GitHashRef"/>
    </ReadLinesFromFile>
    <WriteLinesToFile
        File="$(OutputPath)\git_info"
        Lines="@(PathToHashRef);@(GitHashRef)"
        Overwrite="true"
        Encoding="Unicode"/>
  </Target>

我已经尝试了以下溢出解决方案,但没有成功

  <PropertyGroup>
    <Split>$(PathToHashRef.Split('/'))</Split>
  </PropertyGroup>
c# .net msbuild
1个回答
0
投票

终于我自己解决了,下面是代码。

<Target Name="OutputGitVersion" AfterTargets="AfterBuild">
    <PropertyGroup>
        <RootPath>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), '.git/index'))</RootPath>
    </PropertyGroup>
    <ItemGroup>
        <GitHeadFile Include="$(RootPath)\.git\HEAD"/>
    </ItemGroup>
    
    <ReadLinesFromFile
              File="@(GitHeadFile)" >
        <Output
            TaskParameter="Lines"
            ItemName="PathToHashRef"/>
    </ReadLinesFromFile>
    <PropertyGroup>
        <FileContent>@(PathToHashRef)</FileContent>
        <Split>$(FileContent.Split('/')[2])</Split>
    </PropertyGroup>
    <ItemGroup>
        <PathToHashRefs Include="$(RootPath)\.git\refs\heads\$(Split)"/>
    </ItemGroup>
    <ReadLinesFromFile
          File="@(PathToHashRefs)" >
        <Output
            TaskParameter="Lines"
            ItemName="GitHashRef"/>
    </ReadLinesFromFile>

    <WriteLinesToFile
          File="$(OutputPath)\git_info"
          Lines="@(GitHashRef);$(Split)"
          Overwrite="true"
          Encoding="Unicode"/>
</Target>
© www.soinside.com 2019 - 2024. All rights reserved.