【发布时间】:2012-08-16 01:39:54
【问题描述】:
我正在尝试为 git 编写一个pre-receive hook,它将拉取被推送的代码的最新版本并针对它运行单元测试。我的代码在下面,但是当它到达“git checkout $newrev”时,我得到:
远程:致命:引用不是树:188de39ca68e238bcd7ee9842a79397f39a5849e
我需要做些什么才能在接收发生之前检查正在推送的代码?
#!/bin/bash
while read oldrev newrev refname
do
echo "Preparing to run unit tests for $newrev"
TEST_DIR=/opt/git/sommersault-push-tests/sommersault
# check out this version of the code
unset GIT_DIR
echo $refname
cd $TEST_DIR
git checkout $newrev
...do more stuff...
done
【问题讨论】:
-
你确定你能做到吗?它如何检查它没有收到的代码?我认为你需要做一个接收后挂钩,然后在测试失败时让它回滚(重置)。
-
我认为@wadesworld 给了你正确的建议。我可以将此链接作为类似问题的解决方案:stackoverflow.com/questions/2087216/…
-
啊,好吧。我开始看这篇文章 - codeutopia.net/blog/2011/06/30/… - 这似乎暗示有可能获得代码。 (它使用“git archive”而不是“git checkout”,虽然我都无法工作。)但它还不能访问代码是有道理的。
-
实际上,我收回了这一点。 githooks 手册页显示
This hook is invoked by git-receive-pack on the remote repository,这表明它发生在收到新内容之后。但是请注意,它会为每个要更新的引用接收一行输入。虽然还不确定错误的原因..