关于svn、git生成版本号脚本的再次改进
自从很久之前写了《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生成版本号脚本的再次改进相关推荐
- 关于svn、git生成版本号脚本的改进
之前写了篇文章介绍使用脚本生成SVN.GIT版本号的<SVN.GIT生成版本号>,获取SVN版本号的方法有些不恰当,在不同版本的SVN上会出现问题.这里再对此进行完善. 之前的脚本是通过下 ...
- SVN、GIT生成版本号
SVN生成编译版本号脚本: # file name: svn_local_ver_build.sh #!/bin/bash VER_FILE=version.h LOCALVER=`svn info ...
- python svn模块_使用Python实现一键批量更新SVN/Git模块的脚本
现在我们开发的过程中,大都是模块化的工作方式,咱们的工程源码结构就是N个模块,N个SVN/Git地址,如果需要更新就得手动一个个的操作,弄起来实在太麻烦了,之前我都是写批处理来实现批量更新的,现在来使 ...
- 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. ...
- mysql数据库生成脚本工具下载_PHPMaker下载-基于MYSQL数据库自动生成PHP脚本的软件 v2019.0.2.2 官方版 - 安下载...
PHPMaker是一款功能强大的自动化工具,可以从MySQL,PostgreSQL,Microsoft Access,Microsoft SQL Server,Oracle和SQLite数据库快速生成 ...
- MDK自动生成版本号
MDK自动生成版本号 MDK编译工程时自动生成一个文件版本号,格式为 "V x.x.x Build 2021/01/13 11:08:41 by 计算机名" 我的操作希望对读到的小 ...
- 使用 Git 生成 GPCC 的配置文件(cfg)【图文详细教程、含百度网盘资源】
目录 前言 准备工作 添加缺少的 module 最终结果 前言 本篇博客是生成GPCC的配置文件(cfg)过程的一个总结. 参考博客是三位大佬写的: 利用Git生成GpCC相关配置文件 PCC-TMC ...
- Mac系统Git生成ssh公钥
Mac系统Git生成ssh公钥 在使用Git仓库进行代码管理时,新的电脑上往往需要生成ssh公钥进行匹配,Mac系统生成Git公钥过程如下: 1.检查本机是否已有公钥 在终端中输入如下命令: ? 1 ...
最新文章
- Android环境结构--安装Eclipse错
- inline-block代替浮动布局float:left列表布局最佳方案
- 算法提高课-图论-单源最短路的综合应用-AcWing 342. 道路与航线:最短路dijkstra、拓扑排序 、综合题、好题
- 获取视频的每一帧,并保存为.jpg图片
- java基础第十四天_IO
- JZ2440用U-Boot给Nand-Flash烧写程序时报错:NAND write: incorrect device type in bootloader ‘bootloader‘ is not
- 联邦学习--数据攻击(2)
- 面向.Net程序员的dump分析
- “跨界养猪”这件事,华为正式回应了
- 手动实现 NSTabViewController 的 Rect Transition 及 Propagate Title-b
- 如何使用Greg Mori的Superpixel MATLAB代码
- 1.2、Mybatis二级缓存测试
- 再谈王垠/王垠—写给清华大学的退学申请
- 【DB笔试面试764】在Oracle中,逻辑DG维护中常用到的SQL语句有哪些?
- 作业指导书分析怎么做?制作作业指导书分析的软件有哪些?
- iPhone4 SIM失败?无效SIM?有效解决
- 基于javaweb的高校运动会管理系统(java+ssm+jsp+js+jquery+mysql)
- DEV gridcontrol 汉化类
- 股票波段+趋势+主力动向 三合一指标公式(无未来函数)
- 海气耦合模态--学习笔记