自从很久之前写了《SVN、GIT生成版本号》和《关于svn、git生成版本号脚本的改进》两篇文章后,自以为不会再修改了,结果却不如人意,里面的的脚本还是有bug,现在又要进行再次的修改。这个bug隐藏的比较深,而且要在一定场合下才出现。——其实最主要还是git和svn的判断方法有问题。

在低版本的svn(比如1.6),受控工程的所有目录下都会有.svn目录。而在高版本的svn中(比如1.8),只有顶层目录有一个.svn目录,其它子目录就没有了。假如要在子目录下生成版本号的话,就不能像之前那样判断.svn目录是否存在作为依据了。所以说,这是一个bug。

改进后的脚本如下:

# file name: local_ver_build.sh
# copyleft by Late Lee 2013~2014

#!/bin/sh

if [ $# != 2 ]
then
INC_DIR=.
FILENAME=version.h
else
INC_DIR=$1
FILENAME=$2
fi

VER_FILE=$INC_DIR/$FILENAME

GEN_DATE=`date +"built: %Y-%m-%d %k:%M:%S"`

# 读取Git版本号 
TESTGIT=`git rev-list HEAD`
if [ "$TESTGIT" != "" ]
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版本号 
# 根据不同的SVN版本得到仓库版本号 
VER16=`svn --version | grep "1\.6"`
VER17=`svn --version | grep "1\.7"`
VER18=`svn --version | grep "1\.8"`

if [ "$VER16" != "" ] ; then
SVNLOCALVER=`svn info | cat -n | awk '{if($1==5)print $3}'`
echo "1.6 version"
fi
if [ "$VER17" != "" ] ; then
SVNLOCALVER=`svn info | cat -n | awk '{if($1==6)print $3}'`
echo "1.7 version"
fi
if [ "$VER18" != "" ] ; then
SVNLOCALVER=`svn info | cat -n | awk '{if($1==7)print $3}'`
echo "1.8 version"
fi

if [ "$SVNLOCALVER" != "" ]
then
echo "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_VERSION

else
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_FILE

if [ $VB_HASGITVER = 1 ] && [ $VB_HASSVNVER = 0 ]
then
echo "Git version add."
echo "#define VERSION_NUMBER \"$GIT_VERSION $GEN_DATE\"" >> $VER_FILE
fi

if [ $VB_HASGITVER = 0 ] && [ $VB_HASSVNVER = 1 ]
then
echo "SVN version add."
echo "#define VERSION_NUMBER \"$SVN_VERSION $GEN_DATE\"" >> $VER_FILE
fi

if [ $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
fi

echo "" >> $VER_FILE
echo "#endif" >> $VER_FILE
fi

测试情况如下:
1、只有git仓库,没有svn仓库
./local_ver_build.sh
Git Local version: 32
svn: E155007: '/home/latelee/serial_test' is not a working copy
1.8 version
There is no SVN version control.
Generated: ./version.h
Git version add.

2、同时存在git仓库和svn仓库
./local_ver_build.sh
Git Local version: 32
1.8 version
SVN Local Version: 229
ALL SVN Version: SVN: v229
Generated: ./version.h

Git&SVN version both add.

李迟,记于2014年9月20日凌晨

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

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

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

  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. jenkins svn/git sonarqube scanner 代码集成测试

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

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

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

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

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

  7. MDK自动生成版本号

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

  8. 使用 Git 生成 GPCC 的配置文件(cfg)【图文详细教程、含百度网盘资源】

    目录 前言 准备工作 添加缺少的 module 最终结果 前言 本篇博客是生成GPCC的配置文件(cfg)过程的一个总结. 参考博客是三位大佬写的: 利用Git生成GpCC相关配置文件 PCC-TMC ...

  9. Mac系统Git生成ssh公钥

    Mac系统Git生成ssh公钥 在使用Git仓库进行代码管理时,新的电脑上往往需要生成ssh公钥进行匹配,Mac系统生成Git公钥过程如下: 1.检查本机是否已有公钥 在终端中输入如下命令: ? 1 ...

最新文章

  1. Android环境结构--安装Eclipse错
  2. inline-block代替浮动布局float:left列表布局最佳方案
  3. 算法提高课-图论-单源最短路的综合应用-AcWing 342. 道路与航线:最短路dijkstra、拓扑排序 、综合题、好题
  4. 获取视频的每一帧,并保存为.jpg图片
  5. java基础第十四天_IO
  6. JZ2440用U-Boot给Nand-Flash烧写程序时报错:NAND write: incorrect device type in bootloader ‘bootloader‘ is not
  7. 联邦学习--数据攻击(2)
  8. 面向.Net程序员的dump分析
  9. “跨界养猪”这件事,华为正式回应了
  10. 手动实现 NSTabViewController 的 Rect Transition 及 Propagate Title-b
  11. 如何使用Greg Mori的Superpixel MATLAB代码
  12. 1.2、Mybatis二级缓存测试
  13. 再谈王垠/王垠—写给清华大学的退学申请
  14. 【DB笔试面试764】在Oracle中,逻辑DG维护中常用到的SQL语句有哪些?
  15. 作业指导书分析怎么做?制作作业指导书分析的软件有哪些?
  16. iPhone4 SIM失败?无效SIM?有效解决
  17. 基于javaweb的高校运动会管理系统(java+ssm+jsp+js+jquery+mysql)
  18. DEV gridcontrol 汉化类
  19. 股票波段+趋势+主力动向 三合一指标公式(无未来函数)
  20. 海气耦合模态--学习笔记

热门文章

  1. 在页面里点击一个按钮后出来一个层,可以操作的那么一个层!
  2. 女人抛弃男人的唯一理由
  3. JavaScript鼠标经过图片晃动效果
  4. 李开复 —— 给中国学生的第四封信:大学四年应是这样度过
  5. PHP中时间和日期函数总结
  6. “双减”后首份半年报 新东方在线营收亏损双减
  7. 沃尔沃汽车警告称:半导体短缺将持续到明年
  8. 三星Galaxy S22系列曝光:首批搭载高通骁龙895!
  9. 这届年轻人,连泡面也买不起了
  10. 鼓励生娃!携程创始人梁建章:生1个孩子应重奖100万