【问题标题】:automated code formatting git自动代码格式化 git
【发布时间】:2012-03-13 21:13:12
【问题描述】:

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

【问题讨论】:

  • 在不可避免的情况下,您会想要破坏自动规则,因此最好在提交更改之前在您的代码上手动运行格式化程序。
  • 是的,这确实是个好点

标签: php git code-formatting


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    周围有一些“PHP 美化器”脚本(其中一个在 PEAR 中),您可以从 git 的提交钩子中调用它们。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 您有使用此工具的经验吗?版本是 0.1,最后一次更新是 1.5 年前
      • 我仍然使用它@skelle。至少要格式化每个未格式化的代码段都带有 SO 问题。通常我使用 Netbeans 和快捷键 Ctrl+Shift+F
      • NetBeans 的格式化风格在Options>Editor>Formatting 中设置,并在整个文件或选择上使用快捷方式Ctrl+Alt+F 运行。
      【解决方案4】:

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

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

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

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

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

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

      你可能会发现这个 repo 很有用: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
      $
      

      (提交成功 - 即使不符合代码标准)

      【讨论】:

        【解决方案5】:

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

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

        这里是 PHP 代码嗅探器的链接:

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

        这里是 php 代码嗅探器的 git 预提交钩子的一个很好的例子:

        https://gist.github.com/1892861

        git commit hooks 的一些文档:

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

        【讨论】:

          猜你喜欢
          • 2021-08-23
          • 1970-01-01
          • 2014-02-16
          • 2011-03-26
          • 2016-08-20
          • 1970-01-01
          • 1970-01-01
          • 2013-03-20
          • 2011-03-02
          相关资源
          最近更新 更多