php - 自动代码格式化 git

标签 php git code-formatting

我正在做一个项目 (PHP),每次提交都会有一些代码约定中断。我正在使用 git 进行版本控制。有没有一种自动代码格式化的方法可以让所有代码保持干净?

最佳答案

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

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

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

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

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

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

绕过预提交 Hook

您可能会发现此存储库很有用: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
$

(提交成功 - 尽管不符合代码标准)

关于php - 自动代码格式化 git,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9413487/

相关文章:

git - 为什么 Git Remote/origins/master 分支被分离?

clojure - 如何正确缩进 clojure/lisp?

html - 重新格式化 HTML

php - 在 AJAX 查询中返回 PHP 响应

git - 征求意见 : revision control and binaries

git - 基于 checkin 到 teamcity 中 GIT 存储库中的特定文件夹构建触发器

Android Studio 一行代码折叠方法

php - FFmpeg 可以连接来自不同域的文件吗?

javascript - 如何使用 NodeJS/ReactJS/PHP 提取 PDF 文件的书签 (TOC)?

php - 我如何显示 Laravel 路径中的图像?