自从从 SVN 切换到 Git 后,我们失去了通过pre-commit
subversion 服务器上的挂钩来强制执行编码标准的能力。
使用 Git,您只有在客户端上具有无法以任何方式强制执行的预提交挂钩。更糟糕的是,我们让开发人员使用所有三种主要操作系统,因此在 Linux 或 OS X 上工作的预提交挂钩不会自动在 Windows 上工作。
要走的路是pre-receive
在服务器上实现一个钩子,但解决方案并不像看起来那么容易:
想象一下,开发人员做了 20 次提交并想要推送它们。我所知道的所有 pre-commit 和 pre-receive 钩子 ( 1 , 2 ) 只是检查单个提交,这最终会失败并阻止推送。现在开发人员修复了问题并再次提交,并尝试再次推送。由于钩子检查单个提交,它会再次失败。
所以我们需要一个pre-receive
钩子来生成所有提交中所有更改文件的列表,这些文件将被推送并仅在当前状态下运行 phpcs。
这样的钩子脚本是否已经存在?在哪里?
编辑:似乎有一个脚本可以创建该文件列表- 不幸的是在 Python 中,但可以移植。我仍然对使用 PHPCS 的预制解决方案感兴趣 :)