Git hook预推——强制Gerrit推

Git hook预推——强制Gerrit推,git,hook,gerrit,Git,Hook,Gerrit,我们的团队进行共同开发,我们最近配置了TeamCity,以便在推送到远程回购时运行回归测试。理想情况下,我们的开发人员现在将使用Gerrit推送,这样推送就可以由TeamCity控制。我预计不是所有的开发人员都会通过Gerrit进行推送,并且会决定仍然进行“git推送”并绕过验证门 我已经仔细研究了git的预推钩。。。我知道我可以阻止推送,但是我可以发送一个新的命令来运行Gerrit推送吗 谢谢,答案是你应该使用预提交钩子,这样失败的测试就不会被提交了 您可以将以下内容添加到预提交文件: #!/

我们的团队进行共同开发,我们最近配置了TeamCity,以便在推送到远程回购时运行回归测试。理想情况下,我们的开发人员现在将使用Gerrit推送,这样推送就可以由TeamCity控制。我预计不是所有的开发人员都会通过Gerrit进行推送,并且会决定仍然进行“git推送”并绕过验证门

我已经仔细研究了git的预推钩。。。我知道我可以阻止推送,但是我可以发送一个新的命令来运行Gerrit推送吗

谢谢,答案是你应该使用预提交钩子,这样失败的测试就不会被提交了

您可以将以下内容添加到预提交文件:

#!/bin/bash
printf "Temporarily committing results... \n"
git commit "$@"
printf "Testing using Gerrit... \n"
### ({Command to test using Gerrit goes here} && printf "Success! Commit saved! \n") || 
   (printf "Tests failed, undoing commit \n" && git reset HEAD^)
或者,您应该能够将运行Gerrit的命令附加到
.git/pre-commit
的末尾


注意,钩子并不能防止所有的灾难;如果有人使用选项
——no verify
运行
git commit
,则可能会进行提交转义测试

我不确定是否要在提交阶段进行控制。有可能有人做出了承诺,但还没有做好推动的准备,对吧?我已经设置了TeamCity,在推送阶段触发并启动Gerrit推送。这就是为什么我想截获一次执行常规“git推送”的尝试,并将命令重定向为gerrit推送。@当然,您可能会做出一个尚未被推送的提交,但您在这里所做的只是测试该提交是否正确。毕竟,你为什么要做一些不起作用的事情?这样,无论您计划现在推还是以后推,所有提交都通过了测试。这就是为什么我将回归测试设置为在有人执行Gerrit推时运行的原因。它暂停推送过程以运行回归,并返回通过/失败。如果测试失败,那么推送将被阻止,并通知开发人员。我现在正在考虑,做一个不允许推的预推钩子,并提醒开发人员他们需要运行gerritpush命令。