SVN、GIT生成版本号
SVN生成编译版本号脚本:
#!/bin/bash
VER_FILE=version.h
LOCALVER=`svn info | cat -n | awk '{if($1==5)print $3}'`
echo "LOCALVER:" $LOCALVER
VER=r$LOCALVER
echo "Generated" $VER_FILE
echo "#ifndef PROJECT_VERSION_H" > $VER_FILE
echo "#define PROJECT_VERSION_H" >> $VER_FILE
echo "" >> $VER_FILE
echo "#define VERSION_NUMBER \"$VER\"" >> $VER_FILE
echo "" >> $VER_FILE
echo "#endif" >> $VER_FILE
echo "Job done!!"
方法:
先在SVN工作目录中查看SVN信息,再从这些信息中截取版本号,上面脚本中的命令语句执行得到下列结果:
branches tags trunk
latelee@latelee:mylib$ svn info | cat -n
1 路径: .
2 URL: https://latelee.org/svn/mylib
3 版本库根: https://latelee.org/svn/mylib
4 版本库 UUID: 1f5fb548-7608-e145-84f5-f0a17695809a
5 版本: 4
6 节点种类: 目录
7 调度: 正常
8 最后修改的作者: latelee
9 最后修改的版本: 4
10 最后修改的时间: 2012-03-02 11:31:59 +0800 (五, 2012-03-02)
11
awk '{if($1==5)print $3}'的意思是将第5行号的第3列打印出来。这个就是我们想要的版本号了。
GIT生成编译版本号脚本:
#!/bin/bash
VER_FILE=version.h
LOCALVER=`git rev-list HEAD | wc -l | awk '{print $1}'`
echo "LOCALVER:" $LOCALVER
VER=r$LOCALVER
VER="$VER $(git rev-list HEAD -n 1 | cut -c 1-7)"
GIT_VERSION=$VER
echo "Generated" $VER_FILE
echo "#ifndef PROJECT_VERSION_H" > $VER_FILE
echo "#define PROJECT_VERSION_H" >> $VER_FILE
echo "" >> $VER_FILE
echo "#define VERSION_NUMBER \"$GIT_VERSION\"" >> $VER_FILE
echo "" >> $VER_FILE
echo "#endif" >> $VER_FILE
echo "Job done!!"
方法:
GIT的版本号是一个 40 位的 SHA-1 的哈希值,但我们不使用这个值作为版本号,r16比d51f6f0b5eb202bbe6204246187d35df43aa6ef8更容易看一些。我们先使用git rev-list HEAD命令打印所有GIT版本,再通过wc计数,得到的数字就是我们想要的版本号(万一版本号有10000个,不知道这样做好不好)。另外,我们在数字的版本号后面加上哈希值的前7位,这使得数字的版本号和哈希值的版本号对应起来。
生成的文件示例:
#define PROJECT_VERSION_H
#define VERSION_NUMBER "r16 d51f6f0"
#endif
补记:可以在版本号添加分支名称,语句如下:
GIT_VERSION="$VER $BRANCH"
另一个较复杂的GIT生成编译版本号脚本:
#!/bin/bash
VER_FILE=version.h
git rev-list HEAD | sort > config.git-hash
LOCALVER=`wc -l config.git-hash | awk '{print $1}'`
echo "LOCALVER:" $LOCALVER
if [ $LOCALVER \> 1 ] ; then
VER=`git rev-list origin/master | sort | join config.git-hash - | wc -l | awk '{print $1}'`
if [ $VER != $LOCALVER ] ; then
VER="$VER+$(($LOCALVER-$VER))"
fi
if git status | grep -q "modified:" ; then
VER="${VER}M"
fi
VER="$VER $(git rev-list HEAD -n 1 | cut -c 1-7)"
GIT_VERSION=r$VER
else
GIT_VERSION=
VER="x"
fi
rm -f config.git-hash
echo "VER: " $VER
echo "GIT_VERSION: " $GIT_VERSION
echo "Generated" $VER_FILE
echo "#ifndef PROJECT_VERSION_H" > $VER_FILE
echo "#define PROJECT_VERSION_H" >> $VER_FILE
echo "" >> $VER_FILE
echo "#define VERSION_NUMBER \"$GIT_VERSION\"" >> $VER_FILE
echo "" >> $VER_FILE
echo "#endif" >> $VER_FILE
echo "Job done!!"
这个脚本需要join命令的支持,在windows上join.exe命令需要msys-iconv-2.dll、msys-intl-8.dll动态库的支持。如果安装了MinGW,可以从安装目录中直接获取。
GIT生成版本号参考以下文章,并有修改:
http://www.devbean.info/2011/11/use-git-generate-version-number/
本文脚本由李迟整理测试,语法高亮由迟思堂工作室强力支持。
SVN、GIT生成版本号相关推荐
- 关于svn、git生成版本号脚本的再次改进
自从很久之前写了<SVN.GIT生成版本号>和<关于svn.git生成版本号脚本的改进>两篇文章后,自以为不会再修改了,结果却不如人意,里面的的脚本还是有bug,现在又要进行再 ...
- 关于svn、git生成版本号脚本的改进
之前写了篇文章介绍使用脚本生成SVN.GIT版本号的<SVN.GIT生成版本号>,获取SVN版本号的方法有些不恰当,在不同版本的SVN上会出现问题.这里再对此进行完善. 之前的脚本是通过下 ...
- jenkins svn/git sonarqube scanner 代码集成测试
大家好,我是烤鸭: 今天分享一个代码检测工具sonar,在jenkins集成的时候使用. 环境: sonarqube 7.1 jenkins 2.12x sonarqube scanner (官网最新 ...
- 在VS2013以及Linux系统中利用SVN自动更新版本号
1.在VS2013中利用SVN自动更新版本号 (1).方法一:利用subwcrev.exe中的宏: $WCREV$ : 获取SVN的版本号 $WCURL$ : 获取SVN的地址 关于subwcrev. ...
- MDK自动生成版本号
MDK自动生成版本号 MDK编译工程时自动生成一个文件版本号,格式为 "V x.x.x Build 2021/01/13 11:08:41 by 计算机名" 我的操作希望对读到的小 ...
- Mac系统Git生成ssh公钥
Mac系统Git生成ssh公钥 在使用Git仓库进行代码管理时,新的电脑上往往需要生成ssh公钥进行匹配,Mac系统生成Git公钥过程如下: 1.检查本机是否已有公钥 在终端中输入如下命令: ? 1 ...
- phpstrom配置svn/git提交
在setting选项Version Control中选择Subversion,正确配置SVN/Git的命令行路径,比如我的Git路径:F:Program FilesGitbingit.exe 将当前目 ...
- python svn模块_使用Python实现一键批量更新SVN/Git模块的脚本
现在我们开发的过程中,大都是模块化的工作方式,咱们的工程源码结构就是N个模块,N个SVN/Git地址,如果需要更新就得手动一个个的操作,弄起来实在太麻烦了,之前我都是写批处理来实现批量更新的,现在来使 ...
- VSS SVN GIT SVN 加锁签出
VSS TFS SVN GIT VSS 两大功能: 1.签出后加锁,别人不能签出,独占签出. 2.在服务端可以查看哪些用户签出了哪些文件. 3.查看所有签出未签入的文件列表,SVN未发现此功能. 缺点 ...
最新文章
- 为什么阿里巴巴不建议在for循环中使用+进行字符串拼接
- 一不小心就踩了lombok的坑?
- 编程语言python培训-Python是什么样的编程语言?
- Android Editext监听光标位置
- 全球及中国明装灯具市场规模预测及产量需求渠道分析报告2022-2027年
- 07_js走路小游戏
- verilog赋多位值_verilog赋值
- 测试多个输入条件的方法
- 关于Heap Dump
- java schema名_关于Schema的名字空间
- 人工智能的发展历史_【走近AI】浅谈人工智能的层次结构。
- c语言,在主函数中输入一个整数,求该整数各位数字的乘积,[求助]求由键盘输入的任意两个整数的积...
- 光储直流微电网simulink仿真模型 双向变换器 ,独立光伏系统能量管理,最大功率点跟踪mppt
- 计算机网络技术毕业生实习报告_计算机网络专业毕业实习报告
- Python 办公自动化之 PDF 的详细操作(全)
- python股票量化交易模型_如何建立一个股票量化交易模型并仿真? ?
- 尚学堂马士兵_Struts2下载完成
- 基于同源策略对CORS和JSONP的初步认识
- 数据库文档自动生成工具
- 常用网页正文提取方法总结
热门文章
- 比亚迪汉家族3月热销12359辆 汉EV单车销量破万
- 中概股暴跌后的大厂员工:230万缩水至23万、和家人一起“开源节流”
- 小红书起诉4家涉虚假种草通告平台及MCN机构,索赔1000万
- 华为徐直军:今年超3亿设备搭载鸿蒙系统
- 9月安卓机性能榜单公布:华为未进前十,第一名有点意外
- “常程跳槽小米”裁决出炉:常程继续履行竞业限制,还要赔500多万...
- 微软中国回应关闭实体直营店:中国市场保持正常营运
- 端午小长假全国接待游客4880万人次,客流同比恢复5成
- 我们看到一些知乎大V,开始拍视频了
- 又涨价了!华为 P40系列海外售价曝光:还好国行版友好不少