在Git中检查提交数据的正确方法是什么?


13

我的目标是检查不满足某些要求的提交数据,然后拒绝正在创建或推送到远程存储库的提交。

进行预提交挂钩的问题在于,很难将其部署给许多必须手动更新其预提交挂钩文件的人。同样,Git不允许您在.git文件夹中包含子模块,这对部署来说非常容易,可惜。

我看到的另一个选择是进行检查,我相信远程的更新挂钩,它将检查开发人员推送的每个提交,如果任何提交未通过测试,则拒绝该推送。

有人对此问题有见识吗?如果是这样,您能否提供或指出一个示例更新挂钩脚本?我对它的工作方式有些困惑。


4
这是一个很好的第一个问题。
2012年

Answers:


7

您必须首先确定是不希望提交不合格的代码,还是不希望将其推送/发布回上游。

在我看来,后一种更可行。

像git这样的DVCS。您实际上并不想控制每个开发人员如何使用其本地存储库。而且您真的无法控制它。

如果参与的每个人都自愿接受它,则预提交的钩子可以很好地用作基本验证和清理。我们实际上在公司中宽松地执行了该命令。但是,始终可以使用跳过它git commit --no-verify

另一方面,服务器端钩子不干预程序员的本地工作流,并确保项目中的其他人仅基于满足特定条件的代码来进行工作。通常,这是人们实施自动检查时要寻找的东西。

我想,这种自动验证并不是要取代质量控制,通常可以通过代码审查或结对编程来实现。

如果您熟悉github,您会注意到“拉取请求”是解决此问题的另一种方法。许多开源项目和公司都使用github的pull请求进行分支权限控制和代码审查。但它需要人与人之间的互动,因此可能不是您所要的。


1

正如您已经指出的那样,虽然在技术上可行,但在客户端上执行此操作可能不切实际。另外,许多git用户都提交临时工作,因此对每个提交进行严格检查会适得其反。

标准解决方案是服务器端挂钩。您可能会设置一个pre-receive挂钩,该挂钩在每次推送进入时都会运行,并且可以根据需要拒绝挂钩。其余的取决于您要进行的确切检查。

Pro Git的7.3节“自定义Git-Git挂钩”中对此进行了说明。


感谢您的回答,我真的很喜欢新的Git网站。我唯一的问题是,很难开始编写自己的提交挂钩,尤其是因为您不知道过程中的确切位置以及应检查的内容。如果我想编写一个预接收钩子,是否假定遥控器具有我所推送内容的跟踪分支?我怎么知道?我希望git具有某种功能,可以让您及时仿真此时的状态。
dalanmiller
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.