Answers:
您必须首先确定是不希望提交不合格的代码,还是不希望将其推送/发布回上游。
在我看来,后一种更可行。
像git这样的DVCS。您实际上并不想控制每个开发人员如何使用其本地存储库。而且您真的无法控制它。
如果参与的每个人都自愿接受它,则预提交的钩子可以很好地用作基本验证和清理。我们实际上在公司中宽松地执行了该命令。但是,始终可以使用跳过它git commit --no-verify
。
另一方面,服务器端钩子不干预程序员的本地工作流,并确保项目中的其他人仅基于满足特定条件的代码来进行工作。通常,这是人们实施自动检查时要寻找的东西。
我想,这种自动验证并不是要取代质量控制,通常可以通过代码审查或结对编程来实现。
如果您熟悉github,您会注意到“拉取请求”是解决此问题的另一种方法。许多开源项目和公司都使用github的pull请求进行分支权限控制和代码审查。但它需要人与人之间的互动,因此可能不是您所要的。
正如您已经指出的那样,虽然在技术上可行,但在客户端上执行此操作可能不切实际。另外,许多git用户都提交临时工作,因此对每个提交进行严格检查会适得其反。
标准解决方案是服务器端挂钩。您可能会设置一个pre-receive
挂钩,该挂钩在每次推送进入时都会运行,并且可以根据需要拒绝挂钩。其余的取决于您要进行的确切检查。
Pro Git的第7.3节“自定义Git-Git挂钩”中对此进行了说明。