關於svn git生成版本號指令碼的改進

2021-06-18 07:56:42 字數 3349 閱讀 5480

之前寫了篇文章介紹使用指令碼生成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...