71

githooks のマンページを見てきましたが、何かが欠けていない限り、ローカルのポストプッシュ git フックのオプションが表示されません。マスター ブランチを GitHub リポジトリにプッシュした後、Web サーバー (既にスクリプトを持っている) の API ドキュメントを更新するものを用意したいと考えています。もちろん、git push と api docs run を組み合わせた独自のスクリプトを作成することもできますが、それはやや洗練されていないように感じます。

4

7 に答える 7

54

この問題に対する別の解決策は、呼び出しの前後にgit push実行.git/hooks/pre-pushおよびスクリプトを実行するためのラッパーを用意することです。可能なラッパーは次のようになります。.git/hooks/post-pushgit push

#!/bin/sh

GIT_DIR_="$(git rev-parse --git-dir)"
BRANCH="$(git rev-parse --symbolic --abbrev-ref $(git symbolic-ref HEAD))"

PRE_PUSH="$GIT_DIR_/hooks/pre-push"
POST_PUSH="$GIT_DIR_/hooks/post-push"

test -x "$PRE_PUSH" &&
    exec "$PRE_PUSH" "$BRANCH" "$@"

git push "$@"

test $? -eq 0 && test -x "$POST_PUSH" &&
    exec "$POST_PUSH" "$BRANCH" "$@"

git-push-whのどこかに保存され、フックでプッシュするかのPATHように呼び出すことができます。git push-wh

于 2010-09-28T11:28:31.657 に答える
36

最近、同じ問題に遭遇しました。私のgitサブモジュールからのプッシュが「スーパープロジェクト」の新しいサブモジュール参照をコミットするように、フックが必要でした。

Chris が述べたように、最善の方法は、次のように git エイリアスを使用することです。

$ git config alias.xpush '!git push $1 $2 && update-server.sh'
# (remember the backslash before the ! if your shell requires it)

これにより、以下が .git/config ファイルに追加されます。

[alias]
  xpush = !git push $1 $2 && update-server.sh

そして今、次のように入力すると:

$ git xpush

変更がプッシュされ、update-server.sh が実行されます。

于 2010-08-12T10:09:17.193 に答える
36

このタイプのフックは、Git ではサポートされていません。 Git のメンテナーによって与えられた Git フックの正当な理由から外れています。

上記のリンクされたメッセージの紹介文は、あなたのケースにほぼ直接語っています。

操作がローカルで開始された後に動作し、ローカル データのみに作用するフックは特に好きではありません。これはおそらく、git ツールのビルディング ブロックが他の人よりも高レベルのスクリプト作成に適していると考えているためです。

PS A「シングルプッシュ」ヒント

  • 完全な説明には注意点が多すぎますが、すべてを理解できれば、詳細に対処できるはずです。

pushurl「代替」オブジェクト ストアを使用したローカル リポジトリへのエクストラは、プッシュ フックをローカルで実行するための低オーバーヘッドの方法を提供します。git push upstream && update-web-serverしかし、実際には、 (シェル エイリアス、git エイリアス、またはスクリプトで)よりもはるかに多くの労力が必要です。

于 2009-11-25T20:05:15.707 に答える
7

Git 1.8.2 から、プッシュ操作の前に呼び出される新しいフックがあります: pre-pushスクリプトが 0 以外を返す場合、プッシュ操作はキャンセルされます。

リリース ノートでの言及: https://github.com/git/git/blob/master/Documentation/RelNotes/1.8.2.txt#L167

サンプル: https://github.com/git/git/blob/87c86dd14abe8db7d00b0df5661ef8cf147a72a3/templates/hooks--pre-push.sample

于 2013-11-27T04:46:46.260 に答える