我们在中央服务器上使用 Git,我们的代码需要在文件中包含版本号。目前的做法是这样的:
- 新开发人员进行“git 克隆”
- 在他的本地副本中,他编辑 .git/hooks/pre-commit 以调用 version.sh
version.sh(包含在项目根目录中)从“git describe”获取版本号并将其存储在文件中。
虽然这可行,但我想确保版本号得到更新,即使开发人员忘记编辑他的预提交 Hook 也是如此。
由于服务器没有工作副本,简单地调用 (pre|post)-receive hooks 是行不通的,所以我想知道是否有办法做到这一点。
最佳答案
中央仓库上的 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
关于使用集中式工作流的 Git 版本编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1852648/