49

コミット後のフックがgitの後に実行されていません。ターミナルから実行しただけでフックが機能することを確認しました。フックのコードは次のとおりです。

#!/bin/sh
#.git/hooks/post-commit
# An example hook script that is called after a successful
# commit is made.
#
# To enable this hook, rename this file to "post-commit".

perl -pi -e 's/([a-f0-9]+)$/'$( git rev-parse HEAD )/ ../../config/commit.git

./.git/hooks/でファイルの名前をpost-commitに変更しましたが、アクセス許可が設定されている-rwxr-x-r-xため、なぜ機能しないのかわかりません。

4

4 に答える 4

211

コミット後のフックが実行されていなかったときに自分の答えに出くわしたので、これを答えとしてここに残しておきます

chmod +x .git/hooks/post-commit

おそらくあらゆる種類のフックに適用されます。実際、おそらくあらゆる種類のスクリプトに当てはまります。

于 2013-01-08T05:40:26.753 に答える
30

次のように、perl行の前後にいくつかのエコー行を配置してみてください。

echo "post-commit started"
perl ...........
echo "post-commit finished"

このようにして、スクリプトが実際に実行されているかどうかを確認できます。

git commit

君は見るべきだ

post-commit started
post-commit finished

出力の終わりに向かって。

于 2011-02-22T21:33:11.793 に答える
24

コミット後のスクリプトが呼び出されなかった理由は次のとおりです。

post-commit.shだけでなく、スクリプトに名前を付けましたpost-commit

フックスクリプトを有効にするには、.gitディレクトリのhooksサブディレクトリに、適切な名前(拡張子なし)で実行可能なファイルを配置します。その時点から、それは呼び出されるべきです。ここでは、主要なフックファイル名のほとんどについて説明します。git-scmを参照してください

フックにbashファイル拡張子が必要な理由が頭の中にあったのかわかりません。

また、フックスクリプトにファイル拡張子を付けることができないことにも気づきませんでした。例えば、

バンドルされたフックスクリプトを使用する場合は、名前を変更する必要があります。それらのファイル名はすべて.sampleで終わります

これが誰かを助けることを願っています。

于 2016-12-07T20:57:51.517 に答える
0

ここに記載されている回答に加えて、フックでのユーザー入力を期待している場合は、標準入力をそのようにキーボードにリダイレクトする必要があることに注意してください(少なくともbashスクリプトの場合)。

exec < /dev/tty
于 2019-09-24T19:44:00.827 に答える