web-dev-qa-db-ja.com

Gitフックをテストする方法

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

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

  • ダミーの「リモート」リポジトリでポストレシーブに変更を加える
  • ダミーのローカルリポジトリに変更を加える
  • ダミーのローカルリポジトリで変更をコミットする
  • 変更をダミーのリモートリポジトリにプッシュする

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

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

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

35
Errol

引数/環境を記録し、それをファイルにダンプするフックを作成します。その後、同じ環境/引数を使用して、余暇に実際のフックを再起動するだけで、まったく同じPushを再発行したかのように動作します。

14
Lily Ballard

この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

9
BMW

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

ssh <repo> 'cd /<repo_path>; git update-ref refs/heads/master HEAD^' && git Push Origin master
3
dirksen