【问题标题】:Git hook pre-push -- force a Gerrit pushGit hook pre-push - 强制 Gerrit 推送
【发布时间】:2016-01-08 22:12:58
【问题描述】:

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

我已经查看了 git pre-push 钩子...我看到我可以阻止推送,但是我可以发送一个新命令来运行 Gerrit 推送吗?

谢谢

【问题讨论】:

    标签: git hook gerrit


    【解决方案1】:

    here 的答案表明您可能应该使用预提交挂钩,这样甚至不会提交失败的测试。

    您可以在预提交文件中添加this

    #!/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 push”并将命令重定向为 gerrit push 的原因。
    • @tennis 当然,您可能会做出一个尚未被推送的提交,但您在这里所做的只是测试该提交是否是一个好的提交。毕竟,你为什么要提交一些不起作用的东西呢?这样,您是否计划现在或以后推送都没有关系 - 所有提交都已通过测试。
    • 对——这就是为什么我设置回归测试以在有人执行 Gerrit 推送时运行。它暂停推送过程以运行回归,并返回通过/失败。如果测试失败,则推送被阻止并通知开发者。我现在正在考虑,做一个不允许推送的预推送钩子,并提醒开发人员他们需要运行 Gerrit 推送命令。
    猜你喜欢
    • 1970-01-01
    • 2015-02-18
    • 2021-12-31
    • 1970-01-01
    • 2015-08-19
    • 2016-08-30
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    相关资源
    最近更新 更多