Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

474
Vistas
El gancho Git Pre-Commit para PHPCS me está dando un error en Windows para Laravel

He instalado PHPCS desde composer.json

 "require-dev": { "phpstan/phpstan": "^0.12.93", "squizlabs/php_codesniffer": "^3.6" },

Estoy usando laravel 8, así que agregué el siguiente código para el archivo de confirmación previa en el archivo .git/hooks/pre-commit :

 #!/bin/sh # get bash colors and styles here: # http://misc.flogisoft.com/bash/tip_colors_and_formatting C_RESET='\e[0m' C_RED='\e[31m' C_GREEN='\e[32m' C_YELLOW='\e[33m' function __run() #(step, name, cmd) { local color output exitcode printf "${C_YELLOW}[%s]${C_RESET} %-20s" "$1" "$2" output=$(eval "$3" 2>&1) exitcode=$? if [[ 0 == $exitcode || 130 == $exitcode ]]; then echo -e "${C_GREEN}OK!${C_RESET}" else echo -e "${C_RED}NOK!${C_RESET}\n\n$output" exit 1 fi } modified="git diff --diff-filter=M --name-only --cached | grep \".php$\"" ignore="resources/lang,resources/views,bootstrap/helpers,database/migrations,bin" phpcs="./vendor/bin/phpcs ./app --report=code --colors --report-width=80 --standard=PSR2 --ignore=${ignore}" __run "1/3" "php lint" "${modified} | xargs -r php -l" __run "2/3" "code sniffer" "${modified} | xargs -r ${phpcs}" __run "3/3" "phpstan" "${modified} | xargs -r vendor/bin/phpstan analyse"

Pero esto me está dando el siguiente error:

 [2/3] code sniffer NOK! xargs: ./vendor/bin/phpcs: No such file or directory

EDITAR:

Necesita agregar el código a continuación

 PROJECT=`php -r "echo dirname(dirname(dirname(realpath('$0'))));"` STAGED_FILES_CMD=`git diff --cached --name-only --diff-filter=ACMR HEAD | grep \\\\.php` # Determine if a file list is passed if [ "$#" -eq 1 ] then oIFS=$IFS IFS=' ' SFILES="$1" IFS=$oIFS fi SFILES=${SFILES:-$STAGED_FILES_CMD} echo "Checking PHP Lint..." echo $FILES;exit 1; for FILE in $SFILES do php -l -d display_errors=0 $PROJECT/$FILE if [ $? != 0 ] then echo "Fix the error before commit." exit 1 fi FILES="$FILES $PROJECT/$FILE" done if [ "$FILES" != "" ] then
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Código trabajado para que sea útil para otros:

 #!C:/Program\ Files/Git/usr/bin/sh.exe PROJECT=`php -r "echo dirname(dirname(realpath('$0')));"` STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep ".php\{0,1\}$") if [[ "$STAGED_FILES" = "" ]]; then exit 0 fi PASS=true echo " Validating PHPCS:" #doesnt matter where git was ran...just get absolute path to the .git folder gitBase=`git rev-parse --absolute-git-dir` # Check for phpcs which ${gitBase}/../<path>/vendor/bin/phpcs &> /dev/null if [[ "$?" == 1 ]]; then echo " Please install PHPCS " exit 1 fi RULESET="$PROJECT/.githooks/ruleset.xml" for FILE in $STAGED_FILES do ${gitBase}/../<path>/vendor/bin/phpcs --colors --standard="$RULESET" -n -p "$FILE" if [[ "$?" == 0 ]]; then echo "PHPCS Passed: $FILE " else echo "PHPCS Failed: $FILE " PASS=false fi done echo " PHPCS validation completed! " if ! $PASS; then echo " COMMIT FAILED: Your commit contains files that should pass PHPCS but do not. Please fix the PHPCS errors and try again. " exit 1 else echo " COMMIT SUCCEEDED " fi exit $?

y conjunto de reglas.xml es

 <?xml version="1.0"?> <ruleset name="PHP_CodeSniffer"> <description>The coding standard for our project.</description> <rule ref="PSR2" /> <file>app</file> <file>bootstrap</file> <file>config</file> <file>database</file> <file>resources</file> <file>routes</file> <file>tests</file> <exclude-pattern>bootstrap/cache/*</exclude-pattern> <exclude-pattern>bootstrap/autoload.php</exclude-pattern> <exclude-pattern>*/migrations/*</exclude-pattern> <exclude-pattern>*/seeds/*</exclude-pattern> <exclude-pattern>*.blade.php</exclude-pattern> <exclude-pattern>*.js</exclude-pattern> <exclude-pattern>tests/*</exclude-pattern> <!-- Show progression --> <arg value="p"/> </ruleset>
over 4 years ago · Santiago Trujillo Denunciar

0

Este gancho proviene de " Cómo configurar ganchos de confirmación de Git para PHP " de Benjamin Delespierre .

Tienes un ejemplo similar en fdemiramon gist , con el comentario :

Se supuso que tiene phpcs y phpcbf en la carpeta bin/ .
La mejor práctica es usar el paquete dedicado para phpcs: squizlabs/PHP_CodeSniffer

Eso significa: incluya una dependencia para squizlabs/php_codesniffer en su archivo composer.json (lo cual hizo).
Por ejemplo:

 { "require-dev": { "squizlabs/php_codesniffer": "3.*" } }

Luego podrá ejecutar PHP_CodeSniffer desde el directorio bin del vendor :

 ./vendor/bin/phpcs -h ./vendor/bin/phpcbf -h

Si el uso de la ruta completa ( /d/Xampp/htdocs/project/vendor/bin/phpcs ) no funciona, aunque sea difícil, en un shell de git bash, ls /d/Xampp/htdocs/project/vendor/bin/phpcs sí lo hace trabajo, verifique, como se comentó, el final de las líneas utilizadas para ese archivo.
Puede obtener la carpeta raíz con, como mencioné aquí , git rev-parse --git-dir .

over 4 years ago · Santiago Trujillo Denunciar

0

Espero que olvides ejecutar composer install después de agregar require-dev a composer.

pero hice el gancho que publicaste en mi ./.git/hooks/pre-commit y trato de confirmar archivos .php . y no tuve ningún error.

o tengo pwd en la función de secuencia de comandos de gancho e imprime el directorio raíz del proyecto . y todo parece estar bien. ya que.

por tu comentario, solo creo que estás ejecutando Windows:

tienes que escribir esto:

 #!C:/Program\ Files/Git/usr/bin/sh.exe

en lugar de unix shebang:

 #!/bin/sh

Camino deseado

El repositorio de git deseado inicializado y el compositor inicializado es el directorio base de su proyecto

suponga que este es su directorio base: /d/Xampp/htdocs/proj/ , entonces su compositor generado debería estar en este directorio:

 /d/Xampp/htdocs/proj/composer.json /d/Xampp/htdocs/proj/composer.lock /d/Xampp/htdocs/proj/vendor/

Además, su .git debe estar en este directorio:

 /d/Xampp/htdocs/proj/.git/

del resultado publicado de pwd, creo que su directorio git está debajo de:

 /d/Xampp/htdocs/proj/api/v2/.git/

así que sugiero eliminar el directorio /d/Xampp/htdocs/proj/api/v2/.git/ , luego ir al cd D:\\Xampp\htdocs\proj y git init , debería crear un nuevo .git directorio en D:\\Xampp\htdocs\proj .

Cambiar directorio desde el script

el pwd imprime el directorio actual , parece que cuando el script de gancho comienza a ejecutar su ruta es lo que se ha informado de pwd.

puede agregar este gravamen antes de la output=...

 cd ../.. pwd

si la pestaña impresa está en otro lugar en lugar del directorio base de su proyecto, puede cambiar el directorio con el cd .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda