防止在同一分支中的两个直接分支中进行通信



我有一个git存储库,其中包含源目录中的代码和测试目录中的测试。

我希望开发人员只能在同一分支中提交源代码或测试目录。因此,如果开发人员开始在源代码中工作,他就不允许再贡献测试,反之亦然。

对于位于另一个分支中的另一个特征,人员的角色可以改变。

我正在考虑git挂钩,尤其是客户端上的预提交挂钩(我知道开发人员可以解决(和服务器上的预推送挂钩(开发人员无法访问挂钩目录(。

在githook脚本中,我想获取所有现有的提交(我如何获取分支的所有哈希?(,检查它们是否在另一个目录中已经有更改,然后是有新更改的目录,或者两个目录(源和测试(中是否都有新更改。

有更好的解决方案来满足我的需求吗?

更新:项目位于SIL-4环境中(请参阅https://en.wikipedia.org/wiki/Safety_integrity_level(,因此,关于开发人员和测试人员的权力分离感的讨论不应包含在这里。这只是一个要求,不能更改。

可以这样做——也就是说,读取分支名称,并根据该名称选择下一次提交时允许的内容——但这是的坏主意,原因有两个:

  1. Git分支名称毫无意义。完全可以使用多个不同的分支名称来标识单个提交。而且,如果你制定基于分支名称的限制,人们只会发明与任何一种模式都不匹配的分支名称(或者使用git commit --no-verify完全跳过测试(。

  2. 新代码需要新测试在编写新代码时,同时为编写新代码的新测试是完全合适的。当新代码进入时,新测试应该通过

尽管如此,编写Git钩子很容易:你可以选择任何你喜欢的语言,只需确保你使用的系统(OS(可以运行钩子。钩子只是运行并产生退出状态的程序。退出状态为"0";成功;(零(表示提交可以继续;非零退出状态意味着提交被禁止。

然而,与此同时,编写一个好的Git钩子是难的引中的文件。

重要提示:请注意,如果钩子退出为非零,那么在钩子运行时Git索引中的文件可能根本不存在。(如果钩子产生零退出状态,允许提交继续进行,那么如果没有其他问题,文件将最终进入该提交。(特别是,当将git add --patchgit commit --include一起使用时和/或当使用git commit --only时,建议用于新提交的文件位于临时索引中,当git commit本身完成运行时,该索引将被删除。该临时索引是要提交的文件作为一个整体存在的唯一位置。

最新更新