使用集中式工作流的Git版本编号

3
我们正在使用带有中央服务器的Git,并且我们的代码需要在文件中包含版本号。目前的做法是这样的:
  1. 新开发人员执行“git clone”
  2. 在他的本地副本中,他编辑.git/hooks/pre-commit以调用version.sh
version.sh(包含在项目根目录中)从“git describe”获取版本号并将其存储在文件中。
虽然这样可以工作,但我想确保即使开发人员忘记编辑他的pre-commit hook,版本号也会更新。
由于服务器没有工作副本,因此仅在那里调用(pre|post)-receive hooks不起作用,因此我想知道是否有一种方法来实现这一点。

如果您能告诉我们为什么需要在那个文件中使用版本号,我们或许可以帮助您解决实际问题(我想,您需要它作为二进制文件的一部分?为什么不让make从git存储中提取并将其设置为宏呢?) - falstro
它应该是二进制的 - 所以是的,如果我们有一个构建过程,我们可以在那里进行编号。然而,我不太愿意发布与我们的存储库不同的东西。(目前,我们只创建工作树的归档文件 - 没有构建过程。) - knipknap
2个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接