3

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

  1. 一个新的开发者做了一个“git clone”
  2. 在他的本地副本中,他编辑 .git/hooks/pre-commit 以调用 version.sh

version.sh(包含在项目根目录中)从“git describe”获取版本号并将其存储在文件中。

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

由于服务器没有工作副本,简单地调用 (pre|post)-receive 那里的钩子是行不通的,所以我想知道是否有办法做到这一点。

4

2 回答 2

4

How about a hooks/update on the central repo that rejects commits without changes to the version file (named VERSION in the example below)?

#! /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
于 2009-12-07T05:10:25.013 回答
1

x264 项目通过统计历史中的 git 提交自动生成版本号。它从 svn 迁移而来,例如,其中的版本实际上被称为 r678,但是有人编写了一个脚本来从 git 生成数字。

http://git.videolan.org/?p=x264.git;a=blob;f=version.sh;hb=HEAD

于 2009-12-06T09:30:56.077 回答