You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Git提交哈希值添加到可执行文件属性的「详情」标签页

将Git提交哈希添加到可执行文件的「详情」属性

你提到的这个需求其实在项目版本溯源里挺常见的——把Git提交的哈希值嵌到可执行文件的「详情」属性里,方便后续快速定位对应代码版本。我先给你梳理几种通用的实现思路,再聊聊你后来提到的GitVersion方案:

通用解决方案(针对Windows PE文件)

Windows下的EXE/DLL这类可执行文件(PE格式),「详情」标签里的信息来自文件的资源节(Resource Section),核心是版本资源(Version Resource)。要把Git哈希加进去,主要有这两个方向:

1. 脚本+资源文件手动注入

  • 先准备一个版本资源模板文件(比如VersionTemplate.rc),里面预留哈希占位符:
    #include <windows.h>
      VS_VERSION_INFO VERSIONINFO
      FILEVERSION 1,0,0,0
      PRODUCTVERSION 1,0,0,0
      BEGIN
        BLOCK "StringFileInfo"
        BEGIN
          BLOCK "040904B0"
          BEGIN
            VALUE "CompanyName", "你的公司名称"
            VALUE "FileDescription", "你的应用描述"
            VALUE "ProductName", "你的产品名称"
            VALUE "FileVersion", "1.0.0.{GIT_SHORT_HASH}"
            VALUE "ProductVersion", "1.0.0.{GIT_SHORT_HASH}"
          END
        END
        BLOCK "VarFileInfo"
        BEGIN
          VALUE "Translation", 0x409, 1200
        END
      END
  • 用PowerShell拉取当前Git短哈希:
    $gitHash = git rev-parse --short HEAD
    
  • 替换模板里的占位符,生成实际的资源文件:
    (Get-Content .\VersionTemplate.rc) -replace "{GIT_SHORT_HASH}", $gitHash | Set-Content .\Version.rc
    
  • 用资源编译器(rc.exe,随Visual Studio/Windows SDK自带)把.rc编译成.res文件:
    rc /v Version.rc
    
  • 最后在编译可执行文件时,把.res文件链接进去,生成的EXE就会在「详情」里显示带哈希的版本号了。

2. 借助VS预构建事件自动化

如果你用Visual Studio开发,可以直接通过预构建事件把上述流程整合到编译环节:

  • 右键项目 → 属性 → 生成事件 → 预生成事件命令行,添加这段脚本:
    :: 获取Git短哈希
    for /f %%i in ('git rev-parse --short HEAD') do set GIT_HASH=%%i
    :: 复制模板文件
    copy "$(ProjectDir)VersionTemplate.rc" "$(ProjectDir)Version.rc"
    :: 替换占位符
    powershell -Command "(Get-Content $(ProjectDir)Version.rc) -replace '{GIT_SHORT_HASH}', '%GIT_HASH%' | Set-Content $(ProjectDir)Version.rc"
    
  • 确保项目里包含生成的Version.rc文件,每次编译前都会自动注入最新的Git哈希。

GitVersion方案(更省心的自动化版本管理)

你提到后来决定用GitVersion的工作方式,这确实是更高效的选择——GitVersion会自动根据Git提交历史、标签生成语义化版本号,还能把Git哈希无缝整合到版本信息里。

用GitVersion的话,大致流程是:

  1. 在项目根目录执行gitversion init,生成配置文件GitVersion.yml。
  2. 在配置里调整版本格式,比如把哈希加到InformationalVersion或FileVersion中(比如设置informational-version: '{SemVer}+{ShortSha}')。
  3. 结合你的构建工具(MSBuild、GitHub Actions、Azure DevOps等),让GitVersion在构建前生成版本变量,自动注入到可执行文件的版本资源里。

GitVersion会帮你搞定所有哈希提取、版本计算的细节,不用手动维护脚本,适合长期迭代的项目。

内容的提问来源于stack exchange,提问作者Dominique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 16:27:52