githooks のマンページを見てきましたが、何かが欠けていない限り、ローカルのポストプッシュ git フックのオプションが表示されません。マスター ブランチを GitHub リポジトリにプッシュした後、Web サーバー (既にスクリプトを持っている) の API ドキュメントを更新するものを用意したいと考えています。もちろん、git push と api docs run を組み合わせた独自のスクリプトを作成することもできますが、それはやや洗練されていないように感じます。
7 に答える
この問題に対する別の解決策は、呼び出しの前後にgit push
実行.git/hooks/pre-push
およびスクリプトを実行するためのラッパーを用意することです。可能なラッパーは次のようになります。.git/hooks/post-push
git 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
最近、同じ問題に遭遇しました。私の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 が実行されます。
このタイプのフックは、Git ではサポートされていません。 Git のメンテナーによって与えられた Git フックの正当な理由から外れています。
上記のリンクされたメッセージの紹介文は、あなたのケースにほぼ直接語っています。
操作がローカルで開始された後に動作し、ローカル データのみに作用するフックは特に好きではありません。これはおそらく、git ツールのビルディング ブロックが他の人よりも高レベルのスクリプト作成に適していると考えているためです。
PS A「シングルプッシュ」ヒント
- 完全な説明には注意点が多すぎますが、すべてを理解できれば、詳細に対処できるはずです。
pushurl
「代替」オブジェクト ストアを使用したローカル リポジトリへのエクストラは、プッシュ フックをローカルで実行するための低オーバーヘッドの方法を提供します。git push upstream && update-web-server
しかし、実際には、 (シェル エイリアス、git エイリアス、またはスクリプトで)よりもはるかに多くの労力が必要です。
Git 1.8.2 から、プッシュ操作の前に呼び出される新しいフックがあります: pre-pushスクリプトが 0 以外を返す場合、プッシュ操作はキャンセルされます。
リリース ノートでの言及: https://github.com/git/git/blob/master/Documentation/RelNotes/1.8.2.txt#L167