我知道这不是您所要求的,但是如果您确实想使用版本号,那么 git-describe 是一个选项。
我用它来为我的库和程序提供版本信息。由于我使用版本格式X.Y.Z
,因此 git-describe 非常适合我。它还有一个额外的好处,就是还为我提供了最新提交的提交 ID,所以我总是可以准确地知道库/程序在源历史记录中的哪一点被编译。
要使用 git-describe,您必须使用签名标签。创建标签时,我使用vX.Y
. 然后 git-describe 将使用以下格式附加补丁和提交信息,vX.Y-Z-gC
其中 X 是主要版本,Y 是次要版本,Z 是补丁级别,C 是 git 提交 ID。
例如,我创建一个提交:
$ git tag -s v0.2 -m "Creating release 0.2"
$ git tag
v0.0
v0.1
v0.2
$ git describe --long --abbrev=7
0.2.0.gbb871fd
然后,我可以使用以下命令导出具有补丁级别的版本:
GIT_DESCRIBE=`git describe --long --abbrev=7 |sed -e 's/-/./g' -e 's/^v//g'`
GIT_MAJOR=`echo ${GIT_DESCRIBE} |cut -d. -f1`
GIT_MINOR=`echo ${GIT_DESCRIBE} |cut -d. -f2`
GIT_PATCH=`echo ${GIT_DESCRIBE} |cut -d. -f3`
GIT_COMMIT=`echo ${GIT_DESCRIBE} |cut -d. -f4`
echo "${GIT_DESCRIBE}"
0.2.53.g00e0e11
echo "${GIT_MAJOR}.${GIT_MINOR}.${GIT_PATCH}.${GIT_COMMIT}"
0.2.53.g00e0e11
在上面的输出中,自最后一个标签创建以来已经有 53 次提交(已修补),并且00e0e11
是修订历史中最新提交的部分提交 ID。
一旦我有了解析的版本信息,我就可以创建一个 C 头文件来定义在源代码中使用的版本号:
cat << EOF > lib_version.h
#undef MYLIB_VER_MAJOR
#undef MYLIB_VER_MINOR
#undef MYLIB_VER_PATCH
#undef MYLIB_VER_COMMIT
#undef MYLIB_VERSION
#define MYLIB_VER_MAJOR ${GIT_MAJOR}
#define MYLIB_VER_MINOR ${GIT_MINOR}
#define MYLIB_VER_PATCH ${GIT_PATCH}
#define MYLIB_VER_COMMIT "${GIT_COMMIT}"
#define MYLIB_VERSION "${GIT_DESCRIBE}"
EOF
我使用了与上述类似的技术,使用 autoconf(和朋友)和 Xcode 的外部构建目标(实际上是我所有的 iOS 应用程序的版本控制方式)在包中生成版本信息。
这是实现上述内容的真实示例(带有源代码):http: //bindle.github.com/LdapKit/请注意,版本信息出现在文档中,并且每次我重新生成文档时都会更新。