gpt4 book ai didi

git - 如何在我的PS脚本中获取Git commit哈希?

转载 作者:行者123 更新时间:2023-12-02 22:52:33 24 4
gpt4 key购买 nike

我正在使用PowerShell脚本调用msbuild并将版本号传递给OctopusDeploy,如下所示:

msbuild "Xyz.sln" /t:Rebuild /p:Configuration=Release /p:RunOctoPack=true /p:OctopackPackageVersion=$versionNumber

...其中$ versionNumber在PS脚本中生成。我想做的是将Git commit哈希的前16个字符添加到版本字符串的末尾,因此最终看起来像:
2.yyyyMMdd.HHmmss-git-6d34e44340f95c2a

我怎样才能做到这一点?考虑到它们现在已经内置了Git支持,是否可以通过 msbuild或Visual Studio以某种方式返回当前的git commit哈希?

最佳答案

实际上,您可以直接在msbuild中直接执行此操作,这样它就可以在VS和大多数CI系统上运行,而无需任何额外步骤(例如PowerShell脚本),即使在跨平台的dotnet CLI和mono上也是如此。

您可以在项目或解决方案(>影响所有项目)目录中创建一个名为Directory.Build.targets的文件,其中包含以下内容(假设MSBuild 15 / VS2017。如果较低,则需要手动导入或将此目标插入每个项目)

<Project>
<Target Name="DetermineOctopackVersion" BeforeTargets="Build" Condition=" '$(RunOctoPack)' == 'true' ">
<Exec Command="git rev-parse HEAD" ConsoleToMSBuild="true" StandardOutputImportance="low">
<Output TaskParameter="ConsoleOutput" PropertyName="GitCommitHash" />
</Exec>
<PropertyGroup>
<VersionDatePart>$([System.DateTime]::get_Now().ToString(yyyyMMdd.HHmmss))</VersionDatePart>
<OctopackPackageVersion>2.$(VersionDatePart)-git-$(GitCommitHash.Substring(0,16))</OctopackPackageVersion>
</PropertyGroup>
</Target>
</Project>

如果希望不仅在 RunOctoPacktrue时在每个构建上都设置该属性,只需删除 Condition属性即可。

但是,如果需要在PowerShell中执行此操作,则可以调用git命令并捕获其输出:
$commitHash = (git rev-parse HEAD).Substring(0,16)
$versionDatePart = [System.DateTime]::Now.ToString('yyyyMMdd.HHmmss')
$version = "1.$versionDatePart-git-$commitHash"

如果您真的想避免调用 git(尽管没有安装git便无法完成不错的构建系统安装程序。哈希,当使用分支时,它将包含要查找哈希的文件的位置。

关于git - 如何在我的PS脚本中获取Git commit哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43962860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com