如果代码约定不正确,有没有办法阻止 git 推送?

Is there a way to prevent git push if the code convention not right?

我听说我可以保护分支并设置一些规则来允许用户推送他们的代码,但是我看不到我想要的。

我想要的是当我设置一些代码约定时,如果用户不遵守它,用户的代码将不会被推送(有一些警告或警告他没有遵守约定的代码部分)。

主要使用的语言将是python,但将来会包含更多语言。

答案是也许。连接的服务器端可以 运行 一个 pre-receive 钩子来检查被推送的内容并接受或拒绝它。但是,GitHub 仅支持 GitHub Enterprise Server(这是本地解决方案)上的自定义 pre-receive 挂钩,而不是 github.com。即使在 GHES 中,超时也被限制为 5 秒,这可能不足以完全检查您的代码。

处理此问题的典型方法是在 CI 中添加一个检查,如果样式不合适或不满足其他策略(例如,缺少尾随空格),该检查将失败。这将允许推送,但它会阻止拉取请求在失败时被合并。

请注意,在客户端使用 pre-pushpre-commit 挂钩不是一个好主意,因为这些挂钩可以被轻易绕过,而且没有留下任何证据。因此,它们不是有效的对照,不应该用于此目的。