我正在构建一个 C # 应用程序,使用 Git 作为我的版本控制。
有没有一种方法可以在构建应用程序时自动将最后一个提交散列嵌入到可执行文件中?
例如,将提交散列打印到控制台看起来如下:
class PrintCommitHash
{
private String lastCommitHash = ?? // What do I put here?
static void Main(string[] args)
{
// Display the version number:
System.Console.WriteLine(lastCommitHash );
}
}
请注意,这必须在 建造时间完成,而不是 运行时间,因为我部署的可执行文件将无法访问 git repo。
一个与 C + + 相关的问题可以在 给你中找到。
剪辑
按照@mattanja 的要求,我发布了我在项目中使用的 git hook 脚本:
由于我的 linux 外壳有点生疏,脚本只是将 AssemblyInfo.cs的前23行读取到一个临时文件,将 git 散列回显到最后一行,并将文件重命名为 AssemblyInfo.cs。我相信还有更好的方法:
#!/bin/sh
cmt=$(git rev-list --max-count=1 HEAD)
head -23 AssemblyInfo.cs > AssemblyInfo.cs.tmp
echo [assembly: AssemblyFileVersion\(\"$cmt\"\)] >> AssemblyInfo.cs.tmp
mv AssemblyInfo.cs.tmp AssemblyInfo.cs
希望这个能帮上忙。