3

私はGITでこのシナリオを持っています:

プッシュで変更されたときに、特定のファイルで「何かをしたい」。たとえば、.sql ファイルが変更された場合は、db にダンプする必要があります。

私は、次のようなステートメントで GIT で「post-receive」フックを使用しています。

DUMP=$(git diff-tree --name-only -r -z master dump.sql);

if [ -n "$DUMP" ]; then
  // using the new dump.sql
fi

フックからプッシュされたばかりの新しい dump.sql にアクセスするにはどうすればよいですか?

4

1 に答える 1

7

以下を使用して、リビジョン $rev からファイル dump.sql を取得できます。

git cat-file blob $rev:dump.sql

post-receive フックは、マスターのプッシュ以外にも呼び出されます...更新されたマスター参照を処理していることをどこかで確認できることを願っています。スタイルの問題として、フック内から master を直接参照するのではなく、フックに渡された new-revision 値を使用します。

通常、私は次のような post-receive フックを書きます:

while read oldrev newrev refname; do
    if [ "$refname" = "refs/heads/master" ]; then
        # definitely updating master; $oldrev and $newrev encompass the changes
        if git diff-tree --name-only -r -z $oldrev $newrev dump.sql; then
            # dump.sql changed...
        fi
    fi
done

重要なことに、これは、マスターに複数のコミットを一度に送信する単一のプッシュにも対処します---質問で示したコマンドは、マスターの最後のコミットのみを見ました。

于 2011-11-20T13:01:27.540 に答える