自动代码格式化git

时间:2012-02-23 12:54:16

标签: php git code-formatting

我正在开发一个项目(PHP),并且在每次提交时都会有一些代码约定的中断。我正在使用git进行版本控制。是否有自动代码格式化的方法,以便所有代码保持干净?

5 个答案:

答案 0 :(得分:19)

问题分为两部分:自动格式化代码,并检测代码何时不符合您的编码标准。

自动格式化代码并不是您想要直接放在您和您的仓库之间的东西。在pre-commit挂钩中修改文件或尝试修改文件可能会造成混乱。因此,使用什么vcs并不重要。

使用工具通过编辑器格式化代码,或者作为开发工作流程(手动或半自动)的过程进行格式化是合适的。例如,vim具有=函数来自动缩进代码,正如其他人Pear's beautifier所提到的那样,这是一种可能性。

检测代码标准版需要一个cli工具来告诉您何时文件不符合编码标准 - 显而易见的选择是PHP Code Sniffer(phpcs) - 尽管它可能只是用于手动美化代码的相同工具(如果使用的话)并检查它是否不会更改文件内容。

如果现有标准都不符合您的风格,您可能需要编写自己的标准才能与phpcs一起使用。

您可以使用pre-commit hook在提交之前触发对代码的检查 - 如果发现代码错误,您将收到有关它们的通知并且提交已中止。您可以使用git commit --no-verify

绕过预提交挂钩

您可能会发现这个回购有用:https://github.com/AD7six/git-hooks

示例:

$ more foo.php 
<?php
    function bar() {
    }
$ git add foo.php
$ git commit -v
running php/lint.php ...    OK
running php/phpcs.php ...   FAIL
phpcs -n -s --extensions=php,ctp --encoding=UTF-8 --standard=Cake '/tmp/cakephp-git-hooks'

FILE: foo.php
---------------------------------------
FOUND 3 ERROR(S) AFFECTING 2 LINE(S)
---------------------------------------
 2 | ERROR | Space indented: Tabs for indents, spaces for alignment (Cake.WhiteSpace.ForceTabIndent)
 2 | ERROR | Line indented incorrectly; expected 0 spaces, found 4 (Cake.WhiteSpace.ScopeIndent.Incorrect)
 3 | ERROR | Space indented: Tabs for indents, spaces for alignment (Cake.WhiteSpace.ForceTabIndent)
---------------------------------------

Time: 0 seconds, Memory: 3.75Mb

$

(提交中止,代码不符合代码标准)

$ git commit -v --no-verify -m "dummy commit"
running misc/happy-commits ...  OK
[2.1 2c432f1] dummy commit
 1 files changed, 3 insertions(+), 0 deletions(-)
 create mode 100644 foo.php
$

(提交成功 - 即使代码标准未得到满足)

答案 1 :(得分:2)

Git知道钩子。您可以利用它们在每个提交被接受到存储库之前运行某种形式的checkstyle应用程序。检查存储库中.git/hooks/中的文件。以这种方式拒绝提交是可能的。我不确定你是否可以修改提交。

答案 2 :(得分:2)

有一些'PHP美化'脚本(其中一个在PEAR中),你可以从git的commit hook调用。

答案 3 :(得分:2)

您可以使用PHP_Beautifier来美化您的PHP脚本。

但我认为在每次提交中美化可能会导致很多修改后的行。这将很难理解diff命令的输出。

答案 4 :(得分:1)

Git具有提交挂钩,允许您在提交之前执行命令。建议不要使用这些提交挂钩来更改源代码,因为这可能会导致不必要的结果。

但是,您可以使用git pre-commit钩子来执行PHP Code sniffer。 PHP代码嗅探器是一个工具,可以通过PEAR安装,它将指示您想知道标准的位置。您可以设置自己的标准或使用PEAR标准等现有标准。可以将提交挂钩设置为显示所有违规(非标准代码)并暂停提交。如果代码符合标准,则可以允许提交。

以下是PHP Code嗅探器的链接:

http://pear.php.net/package/PHP_CodeSniffer/redirected

以下是php代码嗅探器的git pre-commit钩子的一个很好的例子:

https://gist.github.com/1892861

git commit hooks的一些文档:

http://book.git-scm.com/5_git_hooks.html