Gt preCommit(可能有帮助PhpStorm)和php-cs-fixer

时间:2017-07-24 12:31:06

标签: php git phpstorm pre-commit-hook php-cs-fixer

我想要自动进​​程,当我提交文件php-cs-fixer trn并修复所有添加到提交的文件时,也许PhpStorm有机会,在提交或推送之前运行外部工具。我发现只有在提交之后,但我不需要之后,需要之前。我尝试使用预提交事件调整我的git 我在我的项目文件中创建,例如,没有扩展名

sudo gedit .git/hooks/pre-commit

然后添加代码

#!/usr/bin/env bash

ROOT="/home/ivan/host/master"

echo "php-cs-fixer pre commit hook start"

PHP_CS_FIXER="php-cs-fixer"
HAS_PHP_CS_FIXER=false

if [ -x php-cs-fixer ]; then
    HAS_PHP_CS_FIXER=true
fi

if $HAS_PHP_CS_FIXER; then
    git status --porcelain | grep -e '^[AM]\(.*\).php$' | cut -c 3- | while read line; do
        $PHP_CS_FIXER fix --config-file=$ROOT/.php_cs --verbose "$line";
        git add "$line";
    done
else
    echo ""
    echo "Please install php-cs-fixer, e.g.:"
    echo ""
    echo "  composer require --dev fabpot/php-cs-fixer:dev-master"
    echo ""
fi

echo "php-cs-fixer pre commit hook finish"

然后比较我运行某些文件的php-cs-fixer,

php-cs-fixer fix src/AppBundle/Services/OutboundInvoiceService.php

然后检查文件并为此文件提供了许多修复程序部件, 然后签出更改,只需为此文件添加空行并提交它,预提交不起作用,只有我的repo提交空行,没有php-cs-fixer工作。我做错了什么?

我添加未使用的命名空间的示例,php-cs-fixer必须删除它并添加一些其他修复,但添加文件后我只有未使用的命名空间:(

enter image description here enter image description here enter image description here enter image description here enter image description here

只有在我创建php文件时才能工作

#!/usr/bin/php
<?php
/**
 * .git/hooks/pre-commit
 *
 */

 /**
  * collect all files which have been added, copied or
  * modified and store them in an array called output
  */
 exec('git diff --cached --name-status --diff-filter=ACM', $output);
foreach ($output as $file) {

$fileName = trim(substr($file, 1) );
/**
 * Only PHP file
 */
if (pathinfo($fileName,PATHINFO_EXTENSION) == "php") {
    /**
     * Check for error
     */
    $lint_output = array();
    exec("php -l " . escapeshellarg($fileName), $lint_output, $return);
    if ($return == 0) {

        /**
         * PHP-CS-Fixer && add it back
         */
        exec("php-cs-fixer fix {$fileName}; git add {$fileName}");
    } else {

        echo implode("\n", $lint_output), "\n";

        exit(1);

    }
    }
}
exit(0);

在推送之前添加git之后,运行此文件。

但这是一种复杂的方法,因为在提交文件之后,我需要运行这个脚本,但它正在工作。

我的问题如何使用git hooks pre-commit来自动执行此过程?

0 个答案:

没有答案