使用Git进行持续集成

3
我希望能在Git上提供集成钩子,使得当集成失败时,推送被拒绝。例如,当开发人员推送他的更改时,我想检查项目是否仍然可以成功编译。
目前,我设置了post-update钩子来进行编译检查。然而,当我想要拒绝推送时,我会撤销更改并通知开发人员。
git revert --no-edit HEAD
echo "Rejected !"

我的问题是,当另一个开发者想要推送他的更改时,他必须先拉取,从而覆盖他的工作,然后需要发出痛苦的重置/存储命令才能正确合并。
此外,在分支合并的情况下(需要使用-m选项),还无法恢复。

我的当前解决方法是,我不是在服务器上还原,而是将更改合并到另一个分支中(这是我的开发人员默认拉取源):

git checkout integrated
git merge master

什么是实现这个目标的最佳方法?

让你的开发人员在本地运行测试套件。你可以通过预提交钩子自动化这个过程。如果错误仍然被推送,只需进行普通的还原提交或修复错误的提交,并接受这种情况。因为 CI 必须运行才能允许推送,所以让推送持续几分钟听起来像是一个非常糟糕的想法。 - innaM
1个回答

3

最佳方法是为开发人员创建他们自己的特性分支,其中包含后更新钩子来检查编译情况,然后将其合并到主分支中(如果您对此感到非常担心,可以让钩子推送到另一个分支,然后手动将其合并到主分支中)。这样您就不必担心它被拒绝。在我看来,主分支应该仅用作发布分支和参考点,而不是所有人都将所有内容推送到其中的东西。


1
也许楼主应该考虑使用Jenkins。听起来它可以通过“构建前合并”来支持这种情况。请参阅https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin-AdvancedFeatures - Klas Mellbourn
我只是选择了 post-update 钩子,因为他在问题中说他使用了它们,但 Jenkins 也可以使用。 - Learath2
谢谢!我想避免额外的依赖,但也许Jenkins是正确的选择。 - 3XX0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接