我正在构建一个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 );
}
}
请注意,这必须在build时完成,而不是在运行时,因为我部署的可执行文件将无法访问git存储库。
关于C++的一个相关问题可以在here上找到。
编辑
根据@mattanja的请求,我发布了我在项目中使用的git钩子脚本。设置:
钩子是linux shell脚本,放在: path_to_project.git\hooks
由于我的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
希望这能有所帮助。
https://stackoverflow.com/questions/15141338
复制相似问题