在 Git 存储库中保留"hard coded"版本号的最佳方法



我在Github上有一个软件(一些脚本(。比如说,有人通过直接链接下载软件(没有克隆,我不假设用户有 Git(。如何实现在启动脚本时显示当前版本号?如果有人真的克隆了存储库,只需运行 git 描述即可轻松。但是,正如我所说,我不想假设 Git 是可用的。

我只找到了以下相当烦人和糟糕的解决方案。我创建了一个提交后和提交前钩子,使存储库中的文件版本.txt保持最新状态,如下所示:

预提交:

#!/bin/sh
#####################################################
#hook for handling version.txt
#we get the current version number in the form x.y-h, 
#extract x.y and write the next version number
#x.(y+1) to version.txt before push
#####################################################
VER=`git describe --long`
MAIN=`echo $VER | awk -F "-" '/1/ {print $1}'`
SUB=`echo $VER | awk -F "-" '/1/ {print $2}'`
SUBNEXT=$((SUB+1))
echo $MAIN-$SUBNEXT > version.txt
git add version.txt

提交后:

#!/bin/bash
####################
#update version.txt
####################
git rm -q version.txt
VER=`git describe --long`
echo $VER > version.txt

令人讨厌的是,该版本.txt总是在 git 状态下显示为未跟踪的文件。处理这个问题的最佳方法是什么?

在git repo 中将版本记录到文件中的方法是没有 Git 的用户唯一可用的访问权限(因为他们无法通过 git 命令读取版本(。

为了提高效率,您可以使用预推送钩子代替预提交钩子和提交后钩子。

在预推送钩子中,您只需使用最新版本更新version.txt文件并提交更改即可。脚本如下:

#!/bin/sh
ver=$(git describe --long)
echo $ver > version.txt
git add version.txt
git commit -m 'update version.txt'
echo "update version successful"

最新更新