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

Delphi资源与Git分支切换时文件版本被覆盖问题求助

解决Git分支切换后GetFileVersion返回错误版本号的问题

我来帮你捋捋这个问题——之前做Windows项目时也碰到过类似的分支切换后版本号异常的情况,结合你描述的场景,大概率是这几个原因导致的:

可能的原因

  • 版本号相关文件未被Git正确追踪:如果你的版本号是写在资源文件(.rc)或者自动生成的头文件里,而这些文件被加到了.gitignore,或者提交时没纳入Git管理,那切换分支时Git不会覆盖本地的这个文件,导致Branch1里还保留着Branch2生成的高版本号(比如6.7.5.26)。
  • 增量版本号依赖本地缓存/计数器:如果你的版本号是基于本地构建次数、或者某个本地存储的计数器生成的(而不是和Git分支的提交记录绑定),切换分支后本地计数器不会自动重置,构建出来的版本号会延续之前的递增数值,不会回到Branch1的6.7.5.21。
  • 编译缓存未清理:Windows编译资源文件时,编译器可能会缓存生成的.res文件,切换分支后如果没清理缓存,链接阶段会继续使用旧的缓存文件,导致程序里的版本号还是旧的。

具体解决方案

  • 检查并修复Git追踪配置

    1. 用git status查看版本号相关文件(比如RC资源文件、版本头文件)是否被Git追踪。
    2. 如果文件显示为untracked,执行git add <文件名>将其加入追踪,然后提交到对应分支。
    3. 检查.gitignore文件,确保没有忽略这些版本相关的文件。
  • 修改版本号生成逻辑,绑定Git提交记录
    把增量版本号的生成和Git分支的提交历史绑定,比如用当前分支的提交次数作为dwFileVersionLS的数值:

    # 获取当前分支的提交次数,可作为版本号的最后一段
    git rev-list --count HEAD
    

    你可以在项目的预构建脚本里加入这个命令,自动把提交次数写入RC文件的FILEVERSION字段,这样每个分支的版本号会基于自身的提交记录生成,切换分支后自然会对应正确的版本。

  • 切换分支后强制清理构建缓存
    每次切换分支后,先清理构建目录再重新编译:

    • 如果是Visual Studio项目,执行:
      msbuild /t:Clean
      
    • 或者手动删除项目的bin、obj目录,确保编译器重新编译当前分支的所有资源和代码。
  • 临时校验与修正(应急方案)
    切换到Branch1后,手动打开RC资源文件,查看FILEVERSION和PRODUCTVERSION字段,确认是否为6.7.5.21,如果不是的话手动修正后再构建。不过这只是临时办法,根源还是要解决版本号自动生成和Git追踪的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:14:16