我们正在使用Git和中央服务器,我们的代码需要在文件中包含版本号。目前这样做的方式是这样的:
version.sh(包含在项目根目录中)从“git describe”获取版本号并将其存储在文件中。
虽然这有效,但我想确保版本号更新,即使开发人员忘记编辑他的预提交钩子。
由于服务器没有工作副本,只是调用(pre | post)-receive挂钩不起作用,所以我想知道是否有办法做到这一点。
答案 0 :(得分:4)
如果中心仓库中的hooks/update
拒绝提交而不更改版本文件(在下面的示例中名为VERSION
),那该怎么办?
#! /bin/bash
refname="$1"
oldrev="$2"
newrev="$3"
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
exit 1
fi
if [ "$refname" != "refs/heads/master" ]; then
exit 0
fi
if diff -bq <(git show $oldrev:VERSION) \
<(git show $newrev:VERSION) >/dev/null
then
echo "$0: VERSION unchanged; rejecting update" >&2
exit 1
fi
答案 1 :(得分:1)
x264项目通过计算历史记录中的git提交自动生成版本号。它从svn迁移,例如版本实际上被称为r678,但有人编写了一个脚本来从git生成数字。
http://git.videolan.org/?p=x264.git;a=blob;f=version.sh;hb=HEAD