我想使用 PHP CodeSniffer 检查提交到我的远程 git 存储库的代码,如果代码标准有任何问题,则拒绝它。有没有人有一个如何在 git 远程存储库上使用它的例子,或者可能是如何将它与 pre-receive 挂钩使用的例子?谢谢。
问问题
6210 次
4 回答
3
也许这为您指明了正确的方向:(原文来自:http ://www.squatlabs.de/versionierung/arbeiten-git-hooks德语)
#!/usr/bin/php
<?php
$output = array();
$rc = 0;
exec('git rev-parse --verify HEAD 2> /dev/null', $output, $rc);
if ($rc == 0) $against = 'HEAD';
else $against = '4b825dc642cb6eb9a060e54bf8d69288fbee4904';
exec('git diff-index --cached --name-only '. $against, $output);
$needle = '/(\.php|\.module|\.install)$/';
$exit_status = 0;
foreach ($output as $file) {
if (!preg_match($needle, $file)) {
// only check php files
continue;
}
$lint_output = array();
$rc = 0;
exec('php -l '. escapeshellarg($file), $lint_output, $rc);
if ($rc == 0) {
continue;
}
# echo implode("\n", $lint_output), "\n";
$exit_status = 1;
}
exit($exit_status);
您必须编辑 exec 行 exec('php -l... 以指向您的代码嗅探器安装。
于 2010-03-29T16:22:34.680 回答
3
好的,我找到了解决方案:)
这是预接收挂钩的概念验证代码:):
#!/bin/bash
while read old_sha1 new_sha1 refname; do
echo "ns: " $new_sha1;
echo "os: " $old_sha1;
echo "----"
git ls-tree -r $new_sha1 | cut -f 3 -d ' ' | cut -f 1 | while read file; do
git cat-file blob $file
done;
echo "----"
done
exit 1
此示例代码将仅打印远程存储库收到的 blob,但这足以让需要类似的东西的人继续(我希望)。
您可以将每个 blob 放在某个临时文件中,在此文件上运行您需要的任何内容,删除文件,依此类推...
于 2010-03-29T20:00:06.757 回答
2
这可能会有所帮助:http: //github.com/s0enke/git-hooks/tree/master/phpcs-pre-commit/
于 2010-06-20T22:08:58.433 回答
2
我基于 PHPCodeSniffer 开发了一个 pre-receive git hook 来检查 PHP、JavaScript 和 CSS 文件的代码样式。
我的脚本可从 Github 获得: https ://github.com/blueicefield/PHP_CodeSniffer_GIT_Hook
于 2012-06-10T14:19:53.513 回答