SVN迁Git后C# Windows Service如何使用Git Tag替代SVN版本号构建
SVN转Git构建逻辑适配方案(Git Tag替代SVN版本号)
整体调整思路
原有构建逻辑核心是调用SVN命令获取版本号,调整后统一替换为调用Git命令获取Tag号,适配分为.csproj项目文件修改、构建服务函数改造两部分。
1. 主项目.csproj文件逻辑替换
原有SVN版本获取逻辑一般是通过预构建事件/自定义目标执行svn info拿到Revision号,替换为获取Git最新Tag的逻辑即可,分两种场景适配:
- 如果你使用SDK风格.csproj(VS2015支持),直接在项目文件中添加如下构建目标:
<Target Name="FetchGitTagForVersion" BeforeTargets="BeforeBuild"> <!-- 调用Git命令取当前分支最新Tag写入临时文件 --> <Exec Command="git describe --abbrev=0 --tags > git_version.tmp" /> <ReadLinesFromFile File="git_version.tmp"> <Output TaskParameter="Lines" PropertyName="CurrentGitTag" /> </ReadLinesFromFile> <!-- 将Tag赋值给项目版本号 --> <PropertyGroup> <Version>$(CurrentGitTag)</Version> <FileVersion>$(CurrentGitTag)</FileVersion> </PropertyGroup> <Delete Files="git_version.tmp" /> </Target> - 如果你使用传统非SDK风格.csproj,在项目属性的「预构建事件」中添加命令,执行Git取Tag的逻辑,把结果写入
Properties/AssemblyInfo.cs的AssemblyVersion、AssemblyFileVersion字段即可。
2. 构建服务三个函数适配
三个原有SVN相关函数,直接替换Git命令逻辑即可:
- ① Check SVN version(检查当前版本):替换为检查当前代码对应最新Tag,执行命令
git describe --abbrev=0 --tags可直接返回当前分支最新的符合语义化规则的Tag号。如果需要兼容未打Tag的提交构建场景,去掉--abbrev=0参数,会返回[最新Tag]-[后续提交数]-g[commit短哈希]格式的版本标识,可作为临时版本号使用。 - ② Check the last SVN version(检查上一个版本):获取当前最新Tag的前一个版本Tag,执行命令
git describe --abbrev=0 --tags HEAD~1,如果有测试版Tag需要过滤,可追加--match v*参数(替换v*为你正式Tag的前缀规则)。 - ③ CheckLastBuild():原有逻辑为对比当前SVN版本和上一次构建记录的版本判断是否触发新构建,调整为对比当前获取到的Git Tag和上一次构建存储的Tag即可,如果使用带提交数的完整版本标识,可覆盖所有提交的构建触发判断。
注意事项
确保构建服务运行环境配置了Git环境变量,且对项目Git仓库有读权限,避免Git命令执行失败。如果你的Tag带自定义前缀(如v1.0.0),可以增加简单的字符串截取逻辑去掉前缀后再赋值给版本号,和原有纯数字版本号的使用逻辑对齐。
内容的提问来源于stack exchange,提问作者Venkataram Reddy
相关产品推荐
相关产品推荐

