GitVersion结合TFS2015代理的语义化版本配置与增量问题咨询
看起来你已经在TFS2015里用GitVersion搭好了语义化版本的基础框架,但遇到了几个细节卡点,我来逐个帮你解决:
1. GitVersion缓存文件的处理
首先得搞清楚,你提到的.git/gitversion_cache*.yml是GitVersion自动生成的临时缓存文件,用来加快版本计算速度,这个文件绝对不用提交到代码仓库。
至于代理构建目录被清理的问题,完全不用担心——只要你的TFS构建流程里,在编译项目之前先执行GitVersion的命令(比如GitVersion.exe /output buildserver),它就会自动重新生成这个缓存文件。
如果需要自定义版本规则(比如分支的版本递增策略),你应该在仓库根目录创建一个GitVersion.yml配置文件,这个文件是要提交到仓库的,GitVersion会自动读取它来生成符合你需求的版本号,不需要放到代理的特定目录。
另外要注意:确保TFS构建代理能拉取完整的Git仓库历史,不然GitVersion可能没法正确计算版本,导致缓存生成异常。
2. 自动递增$(Fix)(Patch)版本号
GitVersion本身就支持根据提交历史自动递增Patch版本,不过得确保你的配置是对的:
在仓库根目录的GitVersion.yml里,设置主流分支(比如main/master)的递增规则:
mode: Mainline branches: main: increment: Patch regex: ^master$|^main$
这样每次有新的提交合并到主分支,Patch版本就会自动加1。如果是在特性分支上构建,GitVersion会生成带预发布标识的版本(比如1.0.1-feature-login.1),等合并到主分支后,正式版本的Patch就会更新到对应的数值。
这里要踩个坑:如果代理构建时只拉取了最新的提交而不是完整历史,GitVersion识别不到新的提交记录,Patch就不会递增——所以一定要确保TFS的Git拉取步骤是拉取完整仓库。
3. 命令行升级Major/Minor版本
GitVersion是靠Git标签来管理主版本(Major)和次版本(Minor)的,所以升级的操作很简单:
- 要升级Major版本(比如从1.x.x跳到2.0.0),直接在本地打标签然后推送到远程:
git tag -a v2.0.0 -m "Release major version 2.0.0" git push origin v2.0.0 - 要升级Minor版本(比如从1.0.x升到1.1.0),同理:
git tag -a v1.1.0 -m "Release minor version 1.1.0" git push origin v1.1.0
下次TFS构建时,GitVersion会自动识别这个标签,把版本号切换到对应的Major/Minor,后续的提交会继续自动递增Patch版本。要是你想在本地先验证版本是否正确,可以直接运行GitVersion.exe查看生成的版本号,确认没问题再推送标签。
内容的提问来源于stack exchange,提问作者Antonin GAVREL

