SVN、GIT生成版本号

SVN生成编译版本号脚本:

# file name: svn_local_ver_build.sh

#!/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信息,再从这些信息中截取版本号,上面脚本中的命令语句执行得到下列结果:
latelee@latelee:mylib$ ls
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生成编译版本号脚本:
# file name: git_local_ver_build.sh

#!/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位,这使得数字的版本号和哈希值的版本号对应起来。
生成的文件示例:

#ifndef PROJECT_VERSION_H
#define PROJECT_VERSION_H

#define VERSION_NUMBER  "r16 d51f6f0"

#endif

补记:可以在版本号添加分支名称,语句如下:

BRANCH=`git branch | awk '{if ($1=="*") print $2}'`
GIT_VERSION="$VER $BRANCH"

另一个较复杂的GIT生成编译版本号脚本:
# file name: git_build_version.sh

#!/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/

本文脚本由李迟整理测试,语法高亮由迟思堂工作室强力支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值