之前写了篇文章介绍使用脚本生成SVN、GIT版本号的《SVN、GIT生成版本号》,获取SVN版本号的方法有些不恰当,在不同版本的SVN上会出现问题。这里再对此进行完善。

之前的脚本是通过下面的命令获取当前的SVN的提交版本号:

LOCALVER=`svn info | cat -n | awk '{if($1==5)print $3}'`

示例可以参考前面写的文章,意思是获取第5行第3列的数字,这个数字就是提交代码的SVN号。关键的问题是,不同版本的SVN是不是都是第5行是版本号?非也。不同版本是不同的。所以上面的命令就有局限性。我尝试搜索相关资料,但没找到好的方法。于是只好继续沿用上面的方法。但多了对不同的SVN版本作判断。

下面给出结合了SVN、GIT两种版本号生成脚本。脚本中会判断是否存在.git或.svn目录,如果都存在,则将两个版本号写到一起,如只存在其中一个,则生成对应的版本号。

# file name: local_ver_build.sh#!/bin/shif [ $# != 2 ]
thenINC_DIR=.FILENAME=version.h
elseINC_DIR=$1FILENAME=$2
fiVER_FILE=$INC_DIR/$FILENAMEGEN_DATE=`date +"built: %Y-%m-%d %k:%M:%S"`# 读取Git版本号
if [ -d .git ]
then
GITLOCALVER=`git rev-list HEAD | wc -l | awk '{print $1}'`
echo "Git Local version:" $GITLOCALVER
GIT_VER=r$GITLOCALVER
GIT_VER="Git: $GIT_VER $(git rev-list HEAD -n 1 | cut -c 1-7)"
GIT_VERSION=$GIT_VER
VB_HASGITVER=1
else
echo "There is no Git version control."
VB_HASGITVER=0
fi#读取SVN版本号
if [ -d .svn ]
then
# 根据不同的SVN版本得到仓库版本号
VER16=`svn --version | grep "1\.6"`
VER17=`svn --version | grep "1\.7"`
VER18=`svn --version | grep "1\.8"`if [ "$VER16" != "" ]; thenSVNLOCALVER=`svn info | cat -n | awk '{if($1==5)print $3}'`echo "1.6 version"
fi
if [ "$VER17" != "" ]; thenSVNLOCALVER=`svn info | cat -n | awk '{if($1==6)print $3}'`echo "1.7 version"
fi
if [ "$VER18" != "" ]; thenSVNLOCALVER=`svn info | cat -n | awk '{if($1==7)print $3}'`echo "1.8 version"
fiecho "SVN Local Version:" $SVNLOCALVER
SVN_VER=$SVNLOCALVER
SVN_VER="SVN: v$SVN_VER"
SVN_VERSION=$SVN_VER
VB_HASSVNVER=1
echo "ALL SVN Version:" $SVN_VERSIONelse
echo "There is no SVN version control."
VB_HASSVNVER=0
fi#生成版本信息文件
if [ $VB_HASGITVER = 0 ] && [ $VB_HASSVNVER = 0 ]
then
echo "There isn't any version control."
else
echo "Generated:" $VER_FILE echo "#ifndef PROJECT_VERSION_H" > $VER_FILE
echo "#define PROJECT_VERSION_H" >> $VER_FILE
echo "" >> $VER_FILEif [ $VB_HASGITVER = 1 ] && [ $VB_HASSVNVER = 0 ]
then
echo "Git version add."
echo "#define VERSION_NUMBER \"$GIT_VERSION $GEN_DATE\"" >> $VER_FILE
fiif [ $VB_HASGITVER = 0 ] && [ $VB_HASSVNVER = 1 ]
then
echo "SVN version add."
echo "#define VERSION_NUMBER \"$SVN_VERSION $GEN_DATE\"" >> $VER_FILE
fiif [ $VB_HASGITVER = 1 ] && [ $VB_HASSVNVER = 1 ]
then
echo "Git&SVN version both add."
echo "#define VERSION_NUMBER \"$GIT_VERSION , $SVN_VERSION $GEN_DATE\"" >> $VER_FILE
fiecho "" >> $VER_FILE
echo "#endif" >> $VER_FILE
fi

生成的文件内容如下:

#ifndef PROJECT_VERSION_H
#define PROJECT_VERSION_H

#define VERSION_NUMBER "Git: r1 7b09fe3 , SVN: v19 built: 2013-09-11 12:03:24"

#endif

注:CSDN的博客不能再使用之前的手工网页语法高亮了,所以顺从CSDN使用内置的方式。

迟,于2013年9月11日中午小憩前

2014.05.20补充:

原来的脚本关于SVN版本号有一个小小的bug。现在已经修改文章了。

原来是VER16=`svn --version | grep 1.6`,“1.6”会匹配“数字1+任意字符+数字6”,比如它会匹配“1.6”、“126”。如果svn --version输出的信息中不包含“1.6”,但包含了“126”,则VER16是不为空的,脚本会认为是svn的1.6版本。这是不正确的。这是由于同事安装了1.6版本的SVN,但build版本恰好有“128”字符导致上述脚本判断出错而发现的(这种情况下,脚本认为是1.8版本的SVN)。

改为VER16=`svn --version | grep "1\.6"`就能精确地匹配“1.6”,而不是其它的字符。

对此造成的误解十分抱歉。

关于svn、git生成版本号脚本的改进相关推荐

  1. 关于svn、git生成版本号脚本的再次改进

    自从很久之前写了<SVN.GIT生成版本号>和<关于svn.git生成版本号脚本的改进>两篇文章后,自以为不会再修改了,结果却不如人意,里面的的脚本还是有bug,现在又要进行再 ...

  2. SVN、GIT生成版本号

    SVN生成编译版本号脚本: # file name: svn_local_ver_build.sh #!/bin/bash VER_FILE=version.h LOCALVER=`svn info ...

  3. python svn模块_使用Python实现一键批量更新SVN/Git模块的脚本

    现在我们开发的过程中,大都是模块化的工作方式,咱们的工程源码结构就是N个模块,N个SVN/Git地址,如果需要更新就得手动一个个的操作,弄起来实在太麻烦了,之前我都是写批处理来实现批量更新的,现在来使 ...

  4. awstats CGI模式下动态生成页面缓慢的改进

    本文可以看做是 多server多站点情况下awstats日志分析 这篇文章的下篇,在使用过程中发现awstats在cgi模式下动态生成分析报告慢的问题 (尤其是有些站点每天两个多G的日志,查看起来简直 ...

  5. jenkins svn/git sonarqube scanner 代码集成测试

    大家好,我是烤鸭: 今天分享一个代码检测工具sonar,在jenkins集成的时候使用. 环境: sonarqube 7.1 jenkins 2.12x sonarqube scanner (官网最新 ...

  6. 在VS2013以及Linux系统中利用SVN自动更新版本号

    1.在VS2013中利用SVN自动更新版本号 (1).方法一:利用subwcrev.exe中的宏: $WCREV$ : 获取SVN的版本号 $WCURL$ : 获取SVN的地址 关于subwcrev. ...

  7. shell解析html文件,[Shell] Shell 生成 HTML脚本,可显示表格

    Shell 生成 HTML脚本 生成的格式不好看,以后要多改进. [mon@oracle6 source]$ more gen_html #!/bin/bash datetime=`date +&qu ...

  8. mysql数据库生成脚本工具下载_PHPMaker下载-基于MYSQL数据库自动生成PHP脚本的软件 v2019.0.2.2 官方版 - 安下载...

    PHPMaker是一款功能强大的自动化工具,可以从MySQL,PostgreSQL,Microsoft Access,Microsoft SQL Server,Oracle和SQLite数据库快速生成 ...

  9. MDK自动生成版本号

    MDK自动生成版本号 MDK编译工程时自动生成一个文件版本号,格式为 "V x.x.x Build 2021/01/13 11:08:41 by 计算机名" 我的操作希望对读到的小 ...

最新文章

  1. Linux之复制、移动文件及目录命令
  2. [深度学习] 分布式Tensorflow 2.0 介绍(二)
  3. 你们觉得很可笑,但是很多人信的,真的很多很多。。
  4. [日志]家居清洁十大秘笈
  5. 广度优先搜索——填涂颜色(洛谷 P1162)
  6. 函数式接口 lambda表达式 方法引用
  7. python编程单词排序_求教 Python 练习,单词排序
  8. NFT平台Polkamon将于3月31日在Polkastarter进行IDO
  9. 2016蓝桥杯C++A:寒假作业(详细解析)
  10. 高级电工实验室成套设备(带功率表、功率因数表)
  11. 找到某个关键字 同义词词林 python_读一读我——无废话Python(三)条件、循环、函数、表达式
  12. 第9周作业-成本计划
  13. 计算机光盘无法格式化,求助,我的电脑无法格式化DVD光盘,提示为“windows无法完成格式化“。求高手。...
  14. 使用 Python 做音频处理·总章(持续更新)
  15. java提取jks文件提取私钥_如何从JKS文件中取出PEM格式证书
  16. Android 实现动态背景“五彩蛛网”特效,让你大开眼界!
  17. 计算机网线接口灯怎样是正常,电脑网线接口灯不亮是什么原因
  18. 中等专业学校计算机教师,中等专业学校计算机老师年度工作总结
  19. 反查bash历史记录--用Enki学Linux系列(16)
  20. 由和与加数进行凑数的遍历算法

热门文章

  1. html按钮样式_一组强大的CSS3 Material 按钮
  2. 三星调侃iPhone13苍岭绿配色:受宠若惊
  3. 苹果蜂窝网络版iPad mini 6不支持毫米波5G
  4. 荣耀:目前还在观望鸿蒙,未来的对手是苹果
  5. 雷军玩谐音梗:称米粉为“小粽子” 因为粽子“心中有MI”
  6. 特斯拉中国公开统一维保价格
  7. 赵明:荣耀将推超级旗舰 有属于自己的P和Mate系列
  8. iPhone 12来了!苹果官宣第二场新品发布会时间,10月14日见!
  9. 蚂蚁员工持股平台管理权变更 马云持股降至34%
  10. 5G第一个演进版本标准完成 3GPP宣布R16标准冻结