Php 吉特胡克怀疑

Php 吉特胡克怀疑,php,git,shell,Php,Git,Shell,我已经在pre-commit中编写了代码,可以检查是否没有语法错误。但我有一些疑问 它将根据开发人员的PHP版本(可能有所不同)检查语法错误,我认为它应该基于服务器PHP版本。如何处理 变量“scopeVar”的作用域仅以while循环结束,假设我想基于scopeVar的值在while循环之外执行一些操作。 我能处理这个吗 对于Bash中的范围问题: git diff --cached --name-only | while read FILE; do if [[ "$FILE" =~ ^.+(

我已经在pre-commit中编写了代码,可以检查是否没有语法错误。但我有一些疑问

  • 它将根据开发人员的PHP版本(可能有所不同)检查语法错误,我认为它应该基于服务器PHP版本。如何处理
  • 变量“scopeVar”的作用域仅以while循环结束,假设我想基于scopeVar的值在while循环之外执行一些操作。 我能处理这个吗
  • 对于Bash中的范围问题:

    git diff --cached --name-only | while read FILE; do
    if [[ "$FILE" =~ ^.+(php|inc)$ ]]; then
        if [[ -f $FILE ]]; then
            php -l "$FILE" 1> /dev/null
            if [ $? -ne 0 ]; then
               scopeVar=1;
                echo -e "\e[1;31m\tAborting commit due to files with syntax errors. $FILE \e[0m" >&2
                exit 1
            fi
        fi
    fi
    done || exit $?
    
    关于PHP版本。我会在客户端进行PHP版本检查,例如

    declare myvar
    
    git diff --cached --name-only |
    {
      while IFS= read -r FILE; do
        # your code...
        myvar=1
      done
    
      echo $myvar # outputs 1
    }
    

    如果您使用的是bash,那么可以使用进程替换而不是管道来避免此问题:
    done
    
    fatal_error()
    {
      echo >&2 "$1"
      exit 1
    }
    
    test_php_ver()
    {
      r=`php -r 'echo version_compare(PHP_VERSION, "5.6.19") >= 0 ? 1 : 0;'`
      [ $r -eq 1 ] || fatal_error "Invalid php version"
    }
    
    test_php_ver