如果代码约定不正确,有没有办法阻止 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-push
或 pre-commit
挂钩不是一个好主意,因为这些挂钩可以被轻易绕过,而且没有留下任何证据。因此,它们不是有效的对照,不应该用于此目的。
我听说我可以保护分支并设置一些规则来允许用户推送他们的代码,但是我看不到我想要的。
我想要的是当我设置一些代码约定时,如果用户不遵守它,用户的代码将不会被推送(有一些警告或警告他没有遵守约定的代码部分)。
主要使用的语言将是python,但将来会包含更多语言。
答案是也许。连接的服务器端可以 运行 一个 pre-receive
钩子来检查被推送的内容并接受或拒绝它。但是,GitHub 仅支持 GitHub Enterprise Server(这是本地解决方案)上的自定义 pre-receive
挂钩,而不是 github.com。即使在 GHES 中,超时也被限制为 5 秒,这可能不足以完全检查您的代码。
处理此问题的典型方法是在 CI 中添加一个检查,如果样式不合适或不满足其他策略(例如,缺少尾随空格),该检查将失败。这将允许推送,但它会阻止拉取请求在失败时被合并。
请注意,在客户端使用 pre-push
或 pre-commit
挂钩不是一个好主意,因为这些挂钩可以被轻易绕过,而且没有留下任何证据。因此,它们不是有效的对照,不应该用于此目的。