之前寫了篇文章介紹使用指令碼生成svn、git版本號的《svn、git生成版本號》,獲取svn版本號的方法有些不恰當,在不同版本的svn上會出現問題。這裡再對此進行完善。
之前的指令碼是通過下面的命令獲取當前的svn的提交版本號:
localver=`svn info | cat -n | awk ''`
下面給出結合了svn、git兩種版本號生成指令碼。指令碼中會判斷是否存在.git或.svn目錄,如果都存在,則將兩個版本號寫到一起,如只存在其中乙個,則生成對應的版本號。
# file name: local_ver_build.sh
#!/bin/sh
if [ $# != 2 ]
then
inc_dir=.
filename=version.h
else
inc_dir=$1
filename=$2
fiver_file=$inc_dir/$filename
gen_date=`date +"built: %y-%m-%d %k:%m:%s"`
# 讀取git版本號
if [ -d .git ]
then
gitlocalver=`git rev-list head | wc -l | awk ''`
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" != "" ]; then
svnlocalver=`svn info | cat -n | awk ''`
echo "1.6 version"
fiif [ "$ver17" != "" ]; then
svnlocalver=`svn info | cat -n | awk ''`
echo "1.7 version"
fiif [ "$ver18" != "" ]; then
svnlocalver=`svn info | cat -n | awk ''`
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_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
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使用內建的方式。
遲,於2023年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」,而不是其它的字元。
對此造成的誤解十分抱歉。
CMake生成版本號
cmake生成版本號 金慶的專欄 原來的cmake需要用shell指令碼生成svn版本號,再作為cmake引數傳入。cmake呼叫指令碼示例 bin sh cmake.sh servercoderoot code server coderevnum svn info grep revision aw...
關於版本號討論
通常情況下,都會採用語義版本號管理方式。如下 語義版本號分為x.y.z三位,分別代表主版本號 次版本號和補丁版本號。當 變更時,版本號按以下原則更新。在目前的開發中,對於前端而言,會存在多個需求同步開發的情況。假設現在有三個需求,對應0.1.0,0.2.0,0.3.0三個版本分別發布日常,測試完成。...
python 自動生成版本號
本文適用於使用subversion版本控制的讀者.前一段時間研究了一下tortoisesvn的源 發現它使用 nant subwcrev.exe 來自動生成版本號的.subwcrev.exe 是tortoisesvn下的乙個命令列工具,安裝了tortoisesvn 就找到它.這裡補充一下tortoi...