3

中央サーバーで Git を使用しており、コードにはファイルにバージョン番号を含める必要があります。これが現在行われている方法は次のとおりです。

  1. 新しい開発者が「git clone」を行う
  2. ローカル コピーで、.git/hooks/pre-commit を編集して version.sh を呼び出します。

version.sh (プロジェクト ルートに含まれる) は、"git describe" からバージョン番号を取得し、ファイルに格納します。

これは機能しますが、開発者が pre-commit フックを編集するのを忘れた場合でも、バージョン番号が更新されるようにしたいと思います。

サーバーには作業コピーがないため、(pre|post)-receive フックを呼び出すだけでは機能しないため、これを行う方法があるかどうか疑問に思っています。

4

2 に答える 2

4

バージョンファイル(以下の例で名前がhooks/update付けられている)を変更せずにコミットを拒否する中央リポジトリのaはどうですか?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
于 2009-12-07T05:10:25.013 に答える
1

x264プロジェクトは、履歴内のgit commitをカウントすることにより、バージョン番号を自動的に生成します。たとえば、バージョンが実際にはr678と呼ばれていたsvnから移行しましたが、誰かがgitから数値を生成するためのスクリプトを作成しました。

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

于 2009-12-06T09:30:56.077 に答える