How to test git hooks
Since "testing" is a common use for a Git hook, my question is hard to search for.
I'm writing a fairly involved git post-receive hook and want to know what the best way to test it is. Currently my process is:
- make changes to post-receive in a dummy "remote" repo
- make a change to a dummy local repo
- commit change in dummy local repo
- push change to dummy remote repo
Is there any easier way to test this? Ideally it would look like:
- make change(s) to post-receive in a dummy repo
- issue "magic" command to test post-receive
Perhaps I can "reissue" a previous push or have the remote repo act as though it just received a push with a specific hash?
Write a hook that just records its arguments/environment and dumps that to a file. Then you can just re-invoke the real hook at your leisure with the same environment/arguments and it will act as though you just re-issued the exact same push.
Answer this four-years-old question.
If you'd like to test hook in local environment, I give the detail commands for following up, use post-receive as sample:
$ 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.
You should be free to run git push, that the updates are only pushed to local repo /tmp/hook_test/git.git
My approach is to dial the HEAD at the remote repo back one commit, and then push again:
ssh <repo> 'cd /<repo_path>; git update-ref refs/heads/master HEAD^' && git push origin master