40

「テスト」はGitフックの一般的な使用法であるため、私の質問を検索するのは困難です。

私はかなり複雑なgitpost-receiveフックを書いていますが、それをテストするための最良の方法を知りたいです。現在、私のプロセスは次のとおりです。

  • ダミーの「リモート」リポジトリで受信後の変更を行う
  • ダミーのローカルリポジトリに変更を加える
  • ダミーのローカルリポジトリで変更をコミットする
  • 変更をダミーのリモートリポジトリにプッシュ

これをテストする簡単な方法はありますか?理想的には次のようになります。

  • ダミーリポジトリでポストレシーブに変更を加える
  • 「magic」コマンドを発行して、受信後をテストします

おそらく、前のプッシュを「再発行」するか、リモートリポジトリに特定のハッシュでプッシュを受信したかのように動作させることができますか?

4

4 に答える 4

16

引数/環境を記録し、それをファイルにダンプするフックを記述します。次に、同じ環境/引数を使用して、暇なときに実際のフックを再度呼び出すことができます。これは、まったく同じプッシュを再発行したかのように機能します。

于 2012-07-16T20:47:59.797 に答える
15

この4年前の質問に答えてください。

フックをテストしたい場合は、最初にローカル環境でテストする必要があります。フォローアップのための詳細コマンドを提供し、post-receiveサンプルとして使用します。

$ mkdir /tmp/hook_test
$ cd /tmp/hook_test

# set local git repo, where you put hooks in it.
$ git clone --bare https://github.com/git/git.git

# set develop environment which is cloned from the new created repo. 
$ git clone git.git repo 
    
# copy and rename the hook you need test to "post-receive"
$ cd git.git/hooks
$ cp ~/post-receive-test post-receive

# suppose the hook script is bash script.
# edit "post-receive" and add "set -x" to second line in it to active debug

$ cd /tmp/hook_test/repo
# emulate a hook trigger, do some changes, "git add" and "git commit" it 

$ git push
 
# Now you should see the script "post-receive" runs automatically with debug details.

git push更新はローカルリポジトリにのみプッシュされるため、自由に実行できるはずです。/tmp/hook_test/git.git

于 2016-09-05T02:12:13.087 に答える
5

私のアプローチは、リモートリポジトリのHEADを1つのコミットにダイヤルしてから、もう一度プッシュすることです。

ssh <repo> 'cd /<repo_path>; git update-ref refs/heads/master HEAD^' && git push origin master
于 2018-12-07T20:30:21.107 に答える
2

デバッグの場合は、次のようにフックを終了することもできます。

echo "No errors found."
exit 1

フックに満足している場合は、もちろん最後の行をもう一度取り出してください。

于 2020-04-03T13:00:07.870 に答える