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/

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

SVN、GIT生成版本号相关推荐

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

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

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

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

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

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

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

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

  5. MDK自动生成版本号

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

  6. Mac系统Git生成ssh公钥

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

  7. phpstrom配置svn/git提交

    在setting选项Version Control中选择Subversion,正确配置SVN/Git的命令行路径,比如我的Git路径:F:Program FilesGitbingit.exe 将当前目 ...

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

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

  9. VSS SVN GIT SVN 加锁签出

    VSS TFS SVN GIT VSS 两大功能: 1.签出后加锁,别人不能签出,独占签出. 2.在服务端可以查看哪些用户签出了哪些文件. 3.查看所有签出未签入的文件列表,SVN未发现此功能. 缺点 ...

最新文章

  1. 为什么阿里巴巴不建议在for循环中使用+进行字符串拼接
  2. 一不小心就踩了lombok的坑?
  3. 编程语言python培训-Python是什么样的编程语言?
  4. Android Editext监听光标位置
  5. 全球及中国明装灯具市场规模预测及产量需求渠道分析报告2022-2027年
  6. 07_js走路小游戏
  7. verilog赋多位值_verilog赋值
  8. 测试多个输入条件的方法
  9. 关于Heap Dump
  10. java schema名_关于Schema的名字空间
  11. 人工智能的发展历史_【走近AI】浅谈人工智能的层次结构。
  12. c语言,在主函数中输入一个整数,求该整数各位数字的乘积,[求助]求由键盘输入的任意两个整数的积...
  13. 光储直流微电网simulink仿真模型 双向变换器 ,独立光伏系统能量管理,最大功率点跟踪mppt
  14. 计算机网络技术毕业生实习报告_计算机网络专业毕业实习报告
  15. Python 办公自动化之 PDF 的详细操作(全)
  16. python股票量化交易模型_如何建立一个股票量化交易模型并仿真? ?
  17. 尚学堂马士兵_Struts2下载完成
  18. 基于同源策略对CORS和JSONP的初步认识
  19. 数据库文档自动生成工具
  20. 常用网页正文提取方法总结

热门文章

  1. 比亚迪汉家族3月热销12359辆 汉EV单车销量破万
  2. 中概股暴跌后的大厂员工:230万缩水至23万、和家人一起“开源节流”
  3. 小红书起诉4家涉虚假种草通告平台及MCN机构,索赔1000万
  4. 华为徐直军:今年超3亿设备搭载鸿蒙系统
  5. 9月安卓机性能榜单公布:华为未进前十,第一名有点意外
  6. “常程跳槽小米”裁决出炉:常程继续履行竞业限制,还要赔500多万...
  7. 微软中国回应关闭实体直营店:中国市场保持正常营运
  8. 端午小长假全国接待游客4880万人次,客流同比恢复5成
  9. 我们看到一些知乎大V,开始拍视频了
  10. 又涨价了!华为 P40系列海外售价曝光:还好国行版友好不少