使用集中式工作流程进行Git版本编号

时间:2009-12-05 16:31:56

标签: git workflow tags pre-commit centralized

我们正在使用Git和中央服务器,我们的代码需要在文件中包含版本号。目前这样做的方式是这样的:

  1. 新开发人员执行“git clone”
  2. 在他的本地副本中,他编辑.git / hooks / pre-commit来调用version.sh
  3. version.sh(包含在项目根目录中)从“git describe”获取版本号并将其存储在文件中。

    虽然这有效,但我想确保版本号更新,即使开发人员忘记编辑他的预提交钩子。

    由于服务器没有工作副本,只是调用(pre | post)-receive挂钩不起作用,所以我想知道是否有办法做到这一点。

2 个答案:

答案 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