由于“测试”是Git钩子的常用用途,我的问题很难搜索。
我正在写一个相当复杂的git post-receive hook,想知道测试它的最佳方法是什么。目前我的流程是:
有没有更简单的方法来测试它?理想情况下它看起来像:
也许我可以“重新发布”之前的推送,或者让远程仓库表现得像是刚刚接收到具有特定哈希的推送?
答案 0 :(得分:15)
编写一个只记录其参数/环境的钩子并将其转储到文件中。然后你可以用相同的环境/参数重新调用真正的钩子,它就像你刚刚重新发出完全相同的推动一样。
答案 1 :(得分:10)
回答这个有四年之久的问题。
如果您想在本地环境中测试挂钩,我会提供详细的后续跟踪命令,使用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
答案 2 :(得分:1)
我的方法是在远程仓库回拨一次提交的HEAD,然后再次按下:
ssh <repo> 'cd /<repo_path>; git update-ref refs/heads/master HEAD^' && git push origin master
答案 3 :(得分:0)
对于调试,您还可以通过以下方式结束钩子:
echo "No errors found."
exit 1
如果您对自己喜欢的话很满意,当然可以再取出最后一行。