我想从 refs/heads/Branchname 读取 git Head 值和 Hash ref 值并将它们存储到文件路径中。
我能够读取该值并将其存储到文件中现在这就是我想要的
问题是我想拆分 .git/Head 文件值,并且只想存储输出中的分支名称,例如,我从 .git/Head 获取值作为参考:refs/heads/BranchName 但我只需要 BranchName那么如何将此输出分割存储到@(PathToHashRef)
我想读取.git/Head 文件而不传递硬编码路径。
还有我想从 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>
终于我自己解决了,下面是代码。
<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>